Feature Request: Linked Arrays

Steven Schveighoffer schveiguy at yahoo.com
Fri May 2 12:33:50 PDT 2008


"downs" wrote
> janderson wrote:
>> The main thing you have to
>> watch out for is traversal. Often I've seen code slow down because
>> people write a data structure to speed up insertion, not realizing that
>> most of the time was spent in traversal.  By using links the work of the
>> pre-fetcher, code optimizer and cache is increased.
>
> It depends on the size of the elements.
>
> If it's, say, an int[>], about 1k of them could fit into a single page of 
> memory. At that point, and especially if the next array pointer is stored 
> at the _end_ of the memory range, and considering that linear traversal 
> can easily be enhanced with prefetch instructions, I think the traversal 
> speed difference to flat arrays shrinks considerably.

If each array chunk is the same size, you could store the array in an array 
of arrays.  Then lookup time becomes O(1), and appending data is not going 
to cause a copy of the other array chunks that you already have allocated.

If you add a huge piece that is bigger than one chunk, just allocate that 
piece, then slice the piece up into chunks.

It could actually be an array of pointers, assuming all your chunks are the 
same size.

I'd prefer that to a linked list of arrays, where traversal is O(n) (with a 
small constant)

-Steve 





More information about the Digitalmars-d mailing list