Strict capacity of array
Marco Leise
Marco.Leise at gmx.de
Fri Dec 13 11:34:47 PST 2013
Am Fri, 13 Dec 2013 19:47:34 +0100
schrieb "FreeSlave" <freeslave93 at gmail.com>:
> Suppose some class contains slice (dynamic array) as data member.
> Constructor takes integer value that defines the size of data
> should be allocated. After object was constructed size of slice
> never changes by design.
>
> Dynamic arrays are allocated with extra space that we can know
> from 'capacity' property. But how can I allocate exactly as much
> elements as I want? Because in case described above we don't need
> extra space.
There was a recent discussion about the capacity of a dynamic
array that is allocated with a known size (e.g. new int[](25)).
I think the extra space comes from the way the GC allocates
blocks of memory in preset sizes. Actually a malloc implementation
could also have some hidden overallocation.
> I know it's possible to use malloc in constructor and free in
> destructor. But what if I want to expose inner slice by shallow
> copy (i.e. by copying pointer and size, but not underlined data)
> then use it just like usual dynamic array whose lifetime does not
> depend on lifetime of an object it belongs and is managed by GC?
Have you tried this?:
import core.memory;
int[] data = (cast(int*)GC.malloc(size * int.sizeof, GC.BlkAttr.NO_SCAN))[0 .. size];
--
Marco
More information about the Digitalmars-d-learn
mailing list