[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: table.new in 5.3?
- From: Philipp Janda <siffiejoe@...>
- Date: Mon, 25 Nov 2013 16:00:43 +0100
Am 25.11.2013 14:54 schröbte Javier Guerra Giraldez:
On Sun, Nov 24, 2013 at 6:53 AM, Mike Pall <firstname.lastname@example.org> wrote:
It doesn't change the sizes, it doesn't
shrink or reset the table (which would be much less useful in
but at some point it would be resized, right? what happens if there's
a big table, i clear() it, and then add a single key/value. would it
stay big forever? until the next garbage collection? or immediately,
as the set function detects it's way oversized?
I'm interested in that as well. I took a look at the (Lua 5.2) source,
and it seems that a table is only ever resized if Lua can't find an
empty slot for a new element. So if you have a clear table with large
hash and array parts, no memory will be freed until you fill up one of
those parts. Am I missing something?
So LuaJIT's `table.clear` should work fine for its purpose (although
it's basically an alias for `for k in pairs( t ) do t[ k ] = nil end`
anyway). The proposed Lua `table.clear` (or `table.wipe`) would be a way
to actually release the memory owned by a clear table, but what I think
would be needed more is a `table.fit` function that makes array and hash
part exactly as large as needed for the values currently in the table.
Something automatic via the garbage collector would be even better, of
course (maybe this is a case where the lifetime info of a generational
gc would be useful -- short-lived tables don't need to shrink) ...