On Mon, 12 Apr 2010 15:36:19 -0400, Joseph Wakeling
<joseph.wakel...@webdrake.net> wrote:
Joseph Wakeling wrote:
(Actually I'm still having some issues with this, despite using
assumeSafeAppend, but more on that in a separate email.)
... solved; it's interesting to note that assumeSafeAppend has to be
used in _exactly_ the same scope as the append ~= itself.
e.g. with this loop, the memory blows up:
////////////////////////////////////////////////////////////////
foreach(uint i;0..100) {
x.length = 0;
assumeSafeAppend(x);
foreach(uint j;0..5000)
foreach(uint k;0..1000)
x ~= j*k;
writefln("At iteration %u, x has %u elements.",i,x.length);
}
////////////////////////////////////////////////////////////////
This should work as you expect. Can you produce a full code example? Are
you reserving space in x before-hand?
... while with this one it's OK:
////////////////////////////////////////////////////////////////
foreach(uint i;0..100) {
x.length = 0;
foreach(uint j;0..5000) {
foreach(uint k;0..1000) {
assumeSafeAppend(x);
x ~= j*k;
}
}
writefln("At iteration %u, x has %u elements.",i,x.length);
}
////////////////////////////////////////////////////////////////
The first assumeSafeAppend is the only one that matters. Subsequent ones
are wasted cycles. I'm unsure why this one works and the other doesn't.
Again, I need full compilable examples.
-Steve