On 25 May 2009, at 07:38, Bruce Tulloch wrote:

Are we correct to assume that as soon as no variable in our program, be it global, static, object field or property, refers to a dynamic array,
the dynamic array will be released. Are we also correct to assume that
the reassignment of any variable referring to a dynamic array to a new
value will cause the previous array value to be released (presuming
nothing else refers to this array)?

Yes.

One caveat is that the memory may not be immediately released after the last reference that you know of disappears, because there may still be temporary memory locations (implicitly created by the compiler while evaluating expressions) containing a reference. Such temporary locations will be finalised either when they are reused by the compiler later on, or when the function in which they were created by the compiler exits (such temporary locations can never survive the scope in which they were created by the compiler).

However, this could only cause the behaviour you are seeing if you were to call halt() somewhere in a deeply nested function and some temporary locations in a parent stack frame still contained references, or of you call halt() while some threads are still running that have local variables/temporaries that point to such variables.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to