Max Samukha wrote:
On Fri, 16 Oct 2009 14:25:44 +0200, Don <nos...@nospam.com> wrote:
Yes, but you could allocate the data immediately after the Array
structure, so you only have one allocation. And in the common case,
where it never exceeds the original capacity, they stay together and
preserve cache locality.
void *data; // = &raw_data;
size_t length;
size_t capacity; // = 512
ubyte[512] raw_data;
Great! And if the length later exceeds the capacity, try to reallocate
in place. If impossible, allocate a new block, copy the data, adjust
the data pointer and shrink the original block to the size of the
Array struct. Right?
That's the idea. The only problem that Walter pointed out was that
moving GCs may have a problem with internal pointers.
Andrei