[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Reducing memory consumption
- From: Edgar Toernig <froese@...>
- Date: Sat, 28 Aug 2004 04:05:32 +0200
Nick Trout wrote:
>
> If I have a list of functions to register in C this amounts to something
> _like_:
>
> // C
> Lua_function_info fns[] = {
> { "ThisFunctionNameIsVeryDescriptive1", myFnCallback1 },
> { "ThisFunctionNameIsVeryDescriptive2", myFnCallback2 },
> { "ThisFunctionNameIsVeryDescriptive3", myFnCallback3 },
> { "ThisFunctionNameIsVeryDescriptive4", myFnCallback4 },
> { "ThisFunctionNameIsVeryDescriptiveN", myFnCallbackN },
> { 0, 0 }
> };
>
> lua_register_list(fns);
>
> So we end up with duplicate copies of all those strings (because Lua
> copies the function name) and closures around the C functions (32 bytes
> each). I can't register these as local variables (so they're indexed) so
> I can't get the space back. (Perhaps I could somehow register them
> through the debug library?)
/* C side */
int
gimme_funcs(lua_State *L)
{
lua_pushcfunction(L, myFnCallback1);
lua_pushcfunction(L, myFnCallback2);
lua_pushcfunction(L, myFnCallback3);
lua_pushcfunction(L, myFnCallback4);
lua_pushcfunction(L, myFnCallbackN);
return 5;
}
...
lua_register(L, "gimme_funcs", gimme_funcs);
...
-- lua side
local
ThisFunctionNameIsVeryDescriptive1,
ThisFunctionNameIsVeryDescriptive2,
ThisFunctionNameIsVeryDescriptive3,
ThisFunctionNameIsVeryDescriptive4,
ThisFunctionNameIsVeryDescriptiveN = gimme_funcs()
But don't forget to strip debug infos...
Ciao, ET.