Uploaded image for project: 'ROOT'
  1. ROOT
  2. ROOT-10932

Type system looking for mother classes of STL classes

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: In Progress (View Workflow)
    • Priority: Critical
    • Resolution: Unresolved
    • Affects Version/s: 6.20/00, 6.18/02, 6.18/04, 6.22/00, 6.20/02, 6.20/04, 6.20/06
    • Fix Version/s: None
    • Component/s: Core Libraries, I/O
    • Labels:
      None
    • Environment:

      linux (at least): it's stl implementation dependent

      Description

      The mother class of STL classes such as pair is looked for by the type system. This is not correct as the stl types should be opaque to the ROOT types system. This has at least two consequences:
      1. Memory usage caused by autoparsing: upon opening a certain category of CMS files (DIGI), not even the ones with most types inside, a parsing induced RSS footprint of 200MB was measured
      2. The names of the internal implementation of the STL left traces in the persistified objects, e.g.

      for (auto si : *_file0->GetStreamerInfoList()) si->Print()
      [...]
      OBJ: TStreamerInfo	edm::ProcessConfiguration	
      OBJ: TStreamerInfo	__pair_base<edm::Hash<1>,edm::ParameterSetBlob>	
      OBJ: TStreamerInfo	edm::ParameterSetBlob	
      [...]
      

      The item is originally marked Critical because of 2.

      Here a reproducer, which does not involve CMSSW, and can be run on lxplus:

      lxplus757:~$ . /cvmfs/sft.cern.ch/lcg/views/LCG_97/x86_64-centos7-gcc9-opt/setup.sh 
      which root
      lxplus757:~$ which root
      /cvmfs/sft.cern.ch/lcg/views/LCG_97/x86_64-centos7-gcc9-opt/bin/root
      lxplus757:~$ root -b -l
      root [0] TClass::GetClass("pair<int,int>")->InheritsFrom("__pair_base<int, int> >")
      (bool) true
      root [1] .q
      lxplus757:~$ . /cvmfs/sft.cern.ch/lcg/views/LCG_97/x86_64-centos7-gcc8-opt/setup.sh 
      lxplus757:~$ root -b -l
      root [0] TClass::GetClass("pair<int,int>")->InheritsFrom("__pair_base<int, int> >")
      (bool) true
      root [1] .q
      

      while if one takes the default ROOT on lxplus, built for GCC 4.8:

      lxplus783:~$ which root
      /usr/bin/root
      lxplus783:~$ root -l
      root [0] gROOT->GetVersion()
      (const char *) "6.20/04"
      root [1] TClass::GetClass("pair<int,int>")->InheritsFrom("__pair_base<int, int> >")
      (bool) false
      

        Attachments

          Activity

            People

            Assignee:
            pcanal Philippe Canal
            Reporter:
            dpiparo Danilo Piparo
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Dates

              Created:
              Updated: