Re: [ROOT] gROOT->Reset() behaviour

From: Suzanne Panacek (spanacek@fnal.gov)
Date: Tue Oct 03 2000 - 15:52:13 MEST


Hi Damir, Rene,
>From your discussion it is not clear to me if a gROOT->Reset() deletes the
object and hence frees the memory or if it just removes the variable from
the interpreter (somehow)? Could you clarify?

Also it is not totaly clear if a Reset treats variables on the stack
differently than variables on the heap. Could you explain?

Suzanne

----- Original Message -----
From: "Rene Brun" <Rene.Brun@cern.ch>
To: "Damir Buskulic" <buskulic@lapp.in2p3.fr>
Cc: "ROOT mailing list" <roottalk@pcroot.cern.ch>
Sent: Tuesday, October 03, 2000 8:37 AM
Subject: Re: [ROOT] gROOT->Reset() behaviour


> Hi Damir,
>
> gROOT->Reset() is useful at the beginning of an unnamed script that you
want
> to execute multiple times. Because variables defined in an unnamed script
> are in the global scope, one must delete variables created by previous
> executions.
> This works nicely if you execute simple scripts.
> With more complex scripts, it is strongly recommended to always use
> named scripts. In this case, it is not necessary to call gROOT->Reset(),
> the cleanup being automatic when the script terminates its execution.
> In summary, you gROOT->Reset in
> // script simple1.C
>  {
>     gROOT->Reset();
>     int i=9;
>     float x = 7.8;
>     ...
>  }
>
> not necessary in
> // script simple2.C
>   void simple2()
> {
>    int i = 9;
>    float x = 9.8;
>    ..
> }
>
> After execution of simple1.C, all variables created in the script still
> are visible in the global scope. At the next call to simple1.C, the
previous
> variables/objects created in the global scope will be deleted by
gROOT->Reset().
>
> After execution of simple2.C, this is not necessary, variables local to
> simple2.C
> are automatically deleted. Only objects created via new in simple2.C
> continue to exist.
>
> Rene Brun
>
>
> Damir Buskulic wrote:
> >
> > Hi,
> >
> > That's why I was confused. Obviously, I still lack this course...
> > Anyway, even if I perfectly understand why it's impossible to change
> > this behaviour, it is annoying to have a strongly suggested way of
> > cleaning the interpreter environment, when in fact the user himself has
> > to clean some of the objects he created. I know it is basic programming
> > practice but in the interactive session, this may be a problem.
> > Imagine you create several histograms interactively via new, you will
> > not be able to work a few hours without restarting your machine because
> > you (in fact I) fill the memory little by little. I know I should build
> > static objects instead of using new but every small script uses new. And
> > executing again and again such small scripts does exactly the symptoms
> > above if one is too lazy to think absolutely every time to delete his
> > heap objects at the end of his script.
> > Well, Is it really impossible, or is it going to slow down the
> > interpreter to take care of the objects allocated via new and be able to
> > clean completely the memory. This is certainly not the way a C compiler
> > works but it would ease the everyday use. There are certainly obvious
> > cases I miss where this is not applicable. Which ones ?
> >
> > Sorry if all this discussion is like going back in time but I think
> > these simple cases make some people feeling uneasy about the
> > interpreter, when they were used not to bother about pointers, memory
> > and so on. I think it's really a matter of user friendlyness.
> >
> > Cheers
> >
> > Damir
> >
> > Paul Balm wrote:
> > >
> > > Hi!
> > >
> > > You'll probably get a lot more educated asnwer from somebody else on
the
> > > list, but at least I'm quick.
> > > I'm very new to ROOT, so I still remember things from my course. :-)
> > > gROOT->Reset() clears objects created on the stack, and as you know,
the
> > > operator new creates an object on the heap.
> > > I hope I remember correctly, but it looks like that's the problem.
Enter a
> > > line
> > > delete vd;
> > > in the destructor of the class that's creating this object. That
should
> > > help.
> > > Cheers,
> > >
> > > Paul
> > >
> > > Damir Buskulic wrote:
> > >
> > > > Hi,
> > > >
> > > > I know this ubject has been discussed many times but I'm a little
bit
> > > > confused by the behaviour of gROOT->Reset(). It is supposed to clean
all
> > > > global variables in the interpreter environment. But when I build a
new
> > > > object of mine :
> > > > vd = new VFrDataBase("demoDB.root")
> > > > and issue a gROOT->Reset() after this, for example by running a
script
> > > > containing gROOT->Reset() as the first line, a few times, it is
obvious
> > > > that the object vd, though removed from the interpreter environment,
and
> > > > though global, is not deleted. The memory is not freed and
everything
> > > > happens as if there was a memory leak.
> > > > What is happening ? When is an object effectively deleted by a
> > > > gROOT->Reset() ?
> > > > I do understand the necessity to not delete some objects (such as a
> > > > Canvas for example) but how do I specify that an object can be
deleted ?
> > > > I tried SetBit(kCanDelete) to no avail.
> > > >
> > > > Any explanations/hints ?
> > > >
> > > > Cheers
> > > >
> > > > Damir
> > > > --
> > > >
=====================================================================
> > > > | Damir Buskulic                  | Universite de Savoie/LAPP
|
> > > > |                                 | Chemin de Bellevue, B.P. 110
|
> > > > | Tel : +33 (0)450091600          | F-74941 Annecy-le-Vieux Cedex
|
> > > > | e-mail: buskulic@lapp.in2p3.fr  | FRANCE
|
> > > >
=====================================================================
> > > > mailto:buskulic@lapp.in2p3.fr
> > >
> >
  ------------------------------------------------------------------------
> > >
> > >   Paul Balm <p.balm@nikhef.nl>
> > >   Fermilab (NIKHEF)
> > >   DZero
> > >
> > >   Paul Balm
> > >   Fermilab (NIKHEF)  <p.balm@nikhef.nl>
> > >   DZero
> > >   PO Box 500         Fax: ++ 1 630 840 8886
> > >   Batavia            Home: ++ 1 630 933 8857
> > >   IL                 Work: ++ 1 630 840 2177
> > >   60510
> > >   USA
> > >   Additional Information:
> > >   Last Name       Balm
> > >   First Name      Paul
> > >   Version         2.1
> >
> > --
> > =====================================================================
> > | Damir Buskulic                  | Universite de Savoie/LAPP       |
> > |                                 | Chemin de Bellevue, B.P. 110    |
> > | Tel : +33 (0)450091600          | F-74941 Annecy-le-Vieux Cedex   |
> > | e-mail: buskulic@lapp.in2p3.fr  | FRANCE                          |
> > =====================================================================
> > mailto:buskulic@lapp.in2p3.fr
>
>



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:34 MET