Is this a bug?

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Apr 29 11:30:51 PDT 2014


On 04/29/2014 10:01 AM, Meta wrote:

 > On Tuesday, 29 April 2014 at 16:52:27 UTC, Ali Çehreli wrote:
 >> That may be misleading because there is no need to allocate with an
 >> explicit new. For example, the slice below is owned by the GC as well:
 >>
 >> int[] foo()
 >> {
 >>     int[] a;

a is an empty slice, ready for use.

 >>     a ~= 42;    // on memory owned by the GC

Since there is no room for the new element, an area large enough for the 
new element and for some more is allocated from the GC. Now a is a 
handle to that one element.

Adding the following line reveals that the memory that has just been 
allocate has room for more elements:

     writeln(a.capacity);    // printed 3 for me

 >>     return a;
 >> }

Yes, a's life ends but the slice that is being returned from the 
function is still alive. So, the GC does not free the memory yet.

Ali



More information about the Digitalmars-d-learn mailing list