Feature Request: Linked Arrays

downs default_357-line at yahoo.de
Fri May 2 00:09:31 PDT 2008


janderson wrote:
> Robert Fraser wrote:
>> I'd rather ask the GC to expose a canExpand() method and have it
>> implemented in the library.
> 
> I agree.

So do I, actually. That would be best.
> 
> BTW, to state the obvious:
> 
> "Linked arrays" have several dis-advantages when compared to arrays.
> Namely after a while of lots of insertions deletions they become very
> fragmented and performance slows down.

I don't see how that could happen, if you're only appending at the end.

> 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.

I don't have the benchs to demonstrate that though. Sorry.

> One think what would help, is if you could get the next free aligned
> block in memory from the previous block.  That way the array would be
> slightly more cache friendly.
> 

I don't understand.

> I'm not saying this sort of data struct doesn't have it's uses,
> sometimes its useful for minimizing Memory Manager fragmentation.  In
> fact if you have a huge array, sometimes the only way to get around
> fragmentation is to spit it up.

That's the idea :) Currently, appending to an array is almost embarassingly slow. This forces the use of preallocating, which is unintuitive.

Imnsho :)

> 
> -Joel

 --downs



More information about the Digitalmars-d mailing list