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

Reply via email to