[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Using Lua and C with a Garbage Collector
- From: "Todor Totev" <umbra.tenebris@...>
- Date: Wed, 15 Mar 2006 09:02:51 +0200
In Lua 5.1 it is trivial to change the memory management.
Acording the manual, the function to create lua state
receives as an argument a function that manages the memory:
lua_State *lua_newstate (lua_Alloc f, void *ud);
In manual paragraph 3.7:
typedef void * (*lua_Alloc) (void *ud,
void *ptr,
size_t osize,
size_t nsize);
Perhaps your one will be something like:
static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud; /* not used */
(void)osize; /* not used */
if (nsize == 0) {
GC_FREE(ptr); /* ANSI requires that free(NULL) has no effect */
return NULL;
}
else
return GC_REALLOC(ptr, nsize);
}
though I'm not expert in using Hans's GC.
If you are using 5.0 - you must re-define some preprocessor macros but
I have never done this before.
Regards,
Todor
On Wed, 15 Mar 2006 01:07:07 +0200, SevenThunders <mattcbro@earthlink.net>
wrote:
Unfortunately it is not trivial to attempt to use both techniques at the
same time. For example I have a C library that uses garbage collection
(Hans Boehm et. al.) to manage a complex tree-like data structure. I
wish
to expose the C library to Lua so that I can script a lot of my test
routines and perform debugging in LUA. The problem is that the Hans
Boehm
gc utilities can not see any of the C pointers that are being held in Lua
and thus all my C objects are eventually collected even though I am still
'using' them.
Is there any clean way to do this? The solutions I can think of all have
issues.