Dynamic array as stack and GC.BlkAttr.APPENDABLE

Rainer Schuetze via Digitalmars-d digitalmars-d at puremagic.com
Sun Nov 16 01:28:25 PST 2014



On 15.11.2014 23:40, IgorStepanov wrote:
> Do I any fundamental error in this code?
> May be Bucket[] ret = new Bucket[len]; ret.ptr is not base pointer?

Yes, for arrays larger than 2kB, the allocation length information is 
placed before the actual data, and ret.ptr has an offset of 16 bytes 
into the allocation block. As a consequence, applying 
BlkAttr.NO_INTERIOR will very likely cause the block to be collected. 
NO_INTERIOR has no effect for smaller blocks.

That's why the existing AA code explicitely uses GC.malloc instead of new[].


More information about the Digitalmars-d mailing list