Answer will make more sense if ar is assumed to be any heap-allocated object, not just dynamic array.

On Monday, 30 December 2013 at 06:52:20 UTC, Ilya Yaroshenko wrote:
case 1:
 delete ar;

Deprecated. Used to call destructor and GC.free after that

case 2:
 ar.destroy();

Current solution to free resources in deterministic way. Calls destructor and sets `ar` to init state so that it can be collected by GC at some unknown point later.

case 3:
 GC.free(ar.ptr);

Marks memory as freed in GC. Unsafe and discouraged because there can still be references pointing at it.

case 4:
ar = null;// (assumed that ar is only one pointer to the same array)

Simply cleans the reference to an object. If it was the only reference, it will be destroyed and freed upon next GC cycle.

What is the difference?

How to free memory to the system immediately?

GC.free

However, if you want deterministic deallocation it makes more sense to use C malloc or custom allocators as GC tends to run faster if it is aware of less memory.

Reply via email to