Andrei Alexandrescu Wrote:

> > Some of the points are in my message from Sat, 05:19 pm. Especially
> > this point: Can a conforming implementation simply re-allocate on
> > every expansion? You make it sound like that would violate some
> > performance guarantees but there are no specifics.
> 
> I don't think a conforming implementation is allowed to do that. The 
> functioning of many algorithms assumes constant-time append. If D can't 
> guarantee that, those algorithms won't work.
> 
> I've been deliberately vague in the book because I wasn't sure we can 
> offer a guarantee if the cache is filled. Now I know we can: if a memory 
> block stores the requested size in addition to today's effective 
> capacity, then the allocator can overallocate growing arrays and then 
> detect and correctly handle in-place reallocation requests, even when 
> the MRU cache capacity is exceeded. There would be a larger cost for 
> that (acquiring a lock), but it's still a constant amortized per-element 
> cost.

I wish we had some performance numbers to support this optimization. There's 
always a break-even point between O(1) and O(N) and I wonder at what N it 
happens. Also, how often does it happen that the cache is full--whether it's 
normal state or an exception. Hitting the cache and the heap lock on every 
extension will also break locality. There are so many factors...

Reply via email to