Dear ROOTers,
I am looking for a way to trace the memory usage of my ROOT based program.
It basically uses our own Event structure (class TH1Event) and a ROOT Tree
consisting of a few brances that are built from data banks.
The memory usage of this program becomes rather big (top or ps say 58 Mb
approx.). Therefore I want to know where this memory goes.
The executable is (with debugging information) 900 kb, the shared library
for the local bank structures / Event Class 4.5 Mb, and the used ROOT
libraries don't sum up to more than 6-8 Mb, I guess.
I enriched the program's main loop with some statement that dump some
memory information:
gObjectTable->Print() gives the list of objects, the total sum of sizes
grows only very slightly during execution and remains at approx. 260 kb.
For more information about the real memory usage I wanted to use
TStorage::PrintStatistics(), but it generates no output.
Memory checking should be enabled normally, I nevertheless stated
TStorage::EnableStatistics(), still the Print function keeps quiet.
How can I learn more about who swallows my memory ?
I use the new ROOT v2.0 (congratulations!) under IRIX 6.2
Thanks, Axel
********************************
Axel Schwank
DESY H1-F22
Notkestrasse 85
D-22607 Hamburg
Rm. 1b/269
Tel (+49 40) 8998-3560
Fax (+49 40) 8998-4385
e-mail schwank@mail.desy.de
Quix 0165-6-2705109
********************************
#include <stdlib.h>
#include <iostream.h>
// ROOT classes
#include <TROOT.h>
#include <TFile.h>
#include <TTree.h>
#include <TBranch.h>
#include <TStorage.h>
#include <TObjectTable.h>
#include <TEnv.h>
// H1 classes
#include "TH1Event.h"
#include "TOutput.h"
#include "minicf.h"
// BOS
#include "cxx_bos.h"
#include "cxx_mdb.h"
#include "cxx_fpack.h"
#include "c_bcs.h"
#include "c_bosmdl.h"
Int_t cosmic(TH1Event*);
TH1Event* gEvent;
TOutput* gOutput;
TObjectTable* gObjectTable;
TROOT Cosmic("cosmic","Selection of events with cosmics");
int main(int argc, char **argv){
gROOT->SetBatch(kTRUE);
gROOT->SetStyle("Plain");
//------Set the rootfilename and number of events to process
const TString rootfilepath = TString("/h1wgs/curacao/x01/usr/schwank/root/");
TString rootfilename = TString("Event.root");
Int_t Nevents = 1000000;
if (argc>1) rootfilename = argv[1];
if (argc>2) Nevents = atoi(argv[2]);
TString rootfile = rootfilepath + rootfilename;
Int_t eventno=0;
//-----Init BOS
const int nbnam=2000;
int iret = 0,ierr = 0;
c_bnames(nbnam);
c_bos(Bcs.iw,NBOSIW);
c_fparmr(5);
c_breadc();
//-----Init H1Event structure
gEnv->Print();
TStorage::EnableStatistics();
gEvent = new TH1Event(1);
gOutput= new TOutput(1);
init_special_messages(gOutput);
//-----open output file
TFile *hfile = new TFile(rootfile,"RECREATE","Cosmic data");
hfile->SetCompressionLevel(3);
TTree *tree = new TTree("T","Required banks for cosmic analysis",2000000);
tree->SetAutoSave(20000000); // autosave when 20 Mbyte written
Int_t bufsize = 640;
Int_t split = 1;
//-----Create the branches, each required bank builds one branch
tree->Branch("DTRA",&gEvent->fDtra,bufsize,split);
tree->Branch("DTNV",&gEvent->fDtnv,bufsize,split);
tree->Branch("DCOS",&gEvent->fDcos,bufsize,split);
tree->Branch("DMUO",&gEvent->fDmuo,bufsize,split);
tree->Branch("DTIO",&gEvent->fDtio,bufsize,split);
tree->Branch("DVER",&gEvent->fDver,bufsize,split);
tree->Branch("DMIS",&gEvent->fDmis,bufsize,split);
// gObjectTable->Print();
TStorage::PrintStatistics();
//-----Main loop
while (eventno<Nevents){
c_fseqr("BOSINPUT",&iret);
if(iret < 0) break;
gEvent->FillDtra();
gEvent->FillDtnv();
gEvent->FillDcos();
gEvent->FillDmuo();
gEvent->FillDtio();
gEvent->FillDver();
gEvent->FillDmis();
if (cosmic(gEvent)<1) {gEvent->Clear(); continue;}
++eventno;
cout << "Event Number " << eventno << " : Run= "
<< Bosmdl.nccrun << " Event= " << Bosmdl.nevent <<endl;
if (eventno%10==0) {
gObjectTable->Print();
TStorage::PrintStatistics();
}
//---Fill required banks in the tree
tree->Fill();
// c_fpcurx("BOSINPUT","IDXCRE",&ierr);
gEvent->Clear();
}
hfile->Write();
//-----close files
hfile->Close();
c_fparm("CLOSE ALL");
return 0;
}
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:31 MET