lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



Hi there,
I've a quick question. I'm currently building a userdata type that is implemented as a pointer to a C++ class. However, as far as the lua garbage collector is concerned the size of this userdata is sizeof(MyClass*) -- the size of a pointer.

When the C++ class in question uses a lot of memory (think a class for an image, for instance) the amount of memory being used by the program and the amount of memory that lua thinks is outstanding to be gc'd can be extremely out of whack (lua will see the multi-megabyte image as only 4 bytes, for instance). This wouldn't be a problem if you're only creating a couple of these userdata in a lua program, but if you're creating a lot of them (as local variables in a loop, for instance) then it doesn't take very long at all to accumulate hundreds of megabytes of uncollected garbage that lua thinks is only a couple hundred bytes.

What I'm wondering is if there's any way of telling the lua garbage collector that this userdata is actually occupying more than 4 bytes? The idea being that then the gc will have a more accurate idea of just how much memory is being used for the purpose of deciding when to run a collection cycle. Right now, I get around this with a liberal sprinkling of collectgarbage("collect") calls throughout my lua code; but, that seems like it rather defeats the purpose of a garbage collected environment.

Thanks,
 Daniel