delete a dynamic array

tsalm tsalm at free.fr
Sun Oct 12 12:19:37 PDT 2008


>>>> It's certainly a stupid question...
>>>> I want to delete an dynamic array of the memory.
>>>> I don't understand why the example above doesn't clear the memory
>>>> uses
>>>> by
>>>> the array :
>>>> /* ------------------------------- */
>>>> import tango.time.Time;
>>>> import tango.io.Stdout;
>>>> import tango.stdc.stdio;
>>>> import tango.core.Memory;
>>>> void main()
>>>> {
>>>> // Create a big array
>>>> int[] t = new int[100000000];
>>>> // delete the array
>>>> t = null;
>>>> // Clean the memory
>>>> GC.collect();
>>>> GC.minimize();
>>>> // No, it's not free :-(
>>>> Stdout("Now, the memory must be free...")();getchar;
>>>> }
>>>> /* ------------------------------- */
>>>> How can I totally clear this array of the memory ?
>>>> Thanks in advance,
>>>> TSalm
>>> I had the same problem. It seems to me that Tango GC just doens't
>>> collect dynamically allocated arrays! (But collects when you use
>>> t.lenght)
>>>  This worked for me:
>>>  import tango.core.Memory;
>>>  GC.free (t.ptr);
>>>
>> Not for me :(
>> Here is my code :
>> /*---------------------------------------*/
>> import tango.io.Stdout;
>> import tango.stdc.stdio;
>> import tango.core.Memory;
>> void main()
>> {
>> // Create a big array
>> int[] t; // = new int[100000000];
>> t.length = 100000000 ;
>> // delete the array
>> GC.free (t.ptr);
>> // Clean the memory
>> GC.collect();
>> GC.minimize();
>> // No, it's not free :-(
>> Stdout("Now, the memory must be free...")();getchar;
>> }
>
> Ok, here's the simplified version of code I used:
>
> class X {
>
>   int[] t;
>
>   void resize (int size) {
>
>     GC.free (t.ptr);
>     t = new int[size];
>   }
> }
>
> void main () {
>
>   X x = new X();
>   x.resize (100000000);
>   // do something
>   x.resize (0);
>   // the memory should be free at this point }
>
>

Oops, I didn't understand that GC free the memory for itself, and not for  
the system ^_^

In your case, can "delete" replace "GC.free" ?
All in all, "delete" works  on mine : the "old" memory space can be re-use  
by another array allocation.

But why GC.minimize doesn't free the memory to the system ? Does it come  
 from Windows Vista ? Or is it the wrong command ?


More information about the Digitalmars-d-learn mailing list