Re: Garbage collection and mutable data structures
- To: mathgroup at smc.vnet.net
- Subject: [mg85640] Re: Garbage collection and mutable data structures
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Sun, 17 Feb 2008 07:16:44 -0500 (EST)
- References: <fp67h9$5f6$1@smc.vnet.net>
massyah at gmail.com wrote: > Hi MathGroup, > > This snippet of code is giving me headaches: > > ----- > $HistoryLength = 0; > NewCell[i_] := Module[{c}, CellVal[c] ^= i; c] > MemoryInUse[] > NewCell /@ Range[10^5]; > MemoryInUse[] > ----- > > It occurred while trying to build mutable data structures by using > upvalues. I can't understand why the temporary variable c is not freed > since I don't keep any reference to it. > Have I missed something in the reference counting scheme ? > > > Thanks in advance, > Hayssam. > The temporary 'c' variables are still in use because Up Values are attached to them! In[1]:= $HistoryLength=0; NewCell[i_]:=Module[{c},CellVal[c]^=i;c] MemoryInUse[] NewCell/@Range[10]; MemoryInUse[] Out[3]= 8977568 Out[5]= 9012224 In[7]:= ?c$* Global` c$ c$940 c$942 c$944 c$946 c$948 c$939 c$941 c$943 c$945 c$947 In[8]:= ?c$943 Global`c$943 Attributes[c$943]={Temporary} CellVal[c$943]^=5 Why not describe what it is you are trying to do. David Bailey http://www.dbaileyconsultancy.co.uk