Arrays
Olli Aalto
oaalto at gmail.com
Thu Jan 11 00:20:44 PST 2007
Stewart Gordon wrote:
> Olli Aalto wrote:
>> Hi!
>>
>> I've been playing with arrays lately. Static arrays, 2/3/4 dimensional
>> arrays and dynamic arrays.
>>
>> First I'd like to ask if it's safe to do this:
>>
>> int[] getIntArrayWithLengthOf2()
>> {
>> int[] array = new int[2];
>> array[] = 2;
>> return array;
>> }
>>
>> some scope
>> {
>> int[2] array2 = getIntArrayWithLengthOf2();
>> }
>>
>> It seem to work, but what about memory? How's it handled? Do I need to
>> delete it if I don't want the GC take care of it?
> <snip>
>
> You have declared an int[2], that is a static array, so it is allocated
> on the stack. What happens is that getIntArrayWithLengthOf2 allocates
> an array on the heap, and then its contents are copied into array2. The
> array allocated on the heap becomes unreachable, and so will be picked
> up by the GC the next time it runs, even if control is still within some
> scope. The copy in array2, OTOH, will persist until the end of the scope.
>
> If OTOH you declared
>
> int[] array2 = getIntArrayWithLengthOf2();
>
> then array2 is a dynamic array. Assignment is then by reference, and so
> array2 points into the memory allocated on the heap by
> getIntArrayWithLengthOf2. The GC will not free the heap-allocated
> memory until array2 goes out of scope or is assigned something else.
> Even then, it will only free it if no other reachable reference to it
> exists.
>
Thanks for the explanation.
I'm still wondering why I can't return a static array from a function. I
know it will be out of scope, but couldn't the contents be copied like
in the above example?
O.
More information about the Digitalmars-d-learn
mailing list