Re: Garbage collection and mutable data structures
- To: mathgroup at smc.vnet.net
- Subject: [mg85659] Re: Garbage collection and mutable data structures
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Tue, 19 Feb 2008 01:45:11 -0500 (EST)
- References: <fp67h9$5f6$1@smc.vnet.net> <fp98kk$u2$1@smc.vnet.net>
David Bailey wrote:
> 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
>
>
>
>
>
Just to clarify a bit - reference counting can't collect circular
structures, and I suspect that CellVal references c$943 which references
CellVal.
David Bailey
http://www.dbaileyconsultancy.co.uk