On Thu, 27 Oct 2011 08:00:31 -0400, Nick Sabalausky <a@a.a> wrote:

"Dominic Jones" <dominic.jo...@qmul.ac.uk> wrote in message
news:j89arh$2ua3$1...@digitalmars.com...
Also an plain array is a good stack. :)

I'd rather not use a plain array because (I assume) that when I push
or pop using arrays, a swap array is created to resize the original.
If this is not the case, then an array will certainly do.
-Dominic

The matter of using D's arrays as a LIFO is discussed the other branch of
this thread (ie, you can do it, but it's slow because a "pop then push" will reallocate and copy), but as far as a FIFO: That may actually be reasonable
to do as an array:

Decreasing the length of an array (from either end) is a trivial matter that
never allocates or copies. Appending to the end *usually* doesn't involve
allocating. So the only issue I see it that the FIFO will "march" across
memory. I guess that's probably not a problem as long as the GC knows it can
reclaim the stuff you've popped off (Does it do that? Ie, if you do "x =
x[10..$];" and there's no other references, is the GC smart enough to
reclaim those first ten spots? I guess I would assume so.)

No, the granularity is on memory blocks. Once you slice off those first 10 elements, and you have no references to them, they become dead weight.

But, as you append to the end, it will eventually outgrow its block, and the dead weight is *not* carried to the new block, so it will then be reclaimed. There are exceptions (such as when a block tacks on more pages).

-Steve

Reply via email to