[REBOL] make list 0 versus make list [] Re:
From: galtbarber:mailandnews at: 28-Aug-2000 14:36
> In both cases, Rebol will expand or contract the list as required to hold
> the data in the list.
It is true that Rebol will expand memory for a block
or list automatically, although you can help speed
it up by pre-initializing to a large number of
elements if you know they will be needed.
In the case of a block, however, I think it does
not release memory automatically. I think it holds
onto the largest memory that instance of the block
has used in case you need that space again.
So, it is quite possible that the same thing applies
to lists, as far as system storage usage goes.
Obviously, if you really knew that you had used tons
of memory and that you wouldn't need that again,
you could create a copy of the original that would
be no larger than needed.
b: make block! 10000000
[... do some stuff, now it is just small, but non-empty...]
b: make block! b
now b will point to a new smaller block, I hope,
and the big original should be garbage recycled.
of course if that didn't work, this should work:
b: copy b
Anyway, I am not sure how to check the exact amount of ram
used accurately. Recycle seems to help sometimes, but
I can't always get the memory reported by taskmgr to
show it's minimum value, so Rebol must be hanging onto
some ram in case the user asks for more later.
Can someone out there enlighten us?
Thanks,
-Galt
p.s. for most of my programs, I don't bother to
pre-initialize the size. I think that's not necessary
unless you have a specific small bit of code that
must be highly optimized for speed, which is usually
not the case for my own programs.