[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: String lifetime (C API)
- From: Asko Kauppi <askok@...>
- Date: Tue, 28 Feb 2006 08:12:28 +0200
One handy trick, for doing dynamic string manipulation within C
functions, involves pushing and/or combining strings using the Lua
stack functions (concat etc.), getting a pointer to the result string
(no C buffer needed), popping it out (no changes to stack) but still
having the result string useful. Very neat, should be compulsory in
Asko Kauppi kirjoitti 28.2.2006 kello 8.09:
But it _is_ safe, and it's actually a very, very, very :) nice
trick to use in C/Lua interfaces.
It is safe to use the returned string, simply because the garbage
collector never runs until you return from your C function back to
Lua. Thus, you can: get a string, pop it, use the pointer.
If you still need the string later, after returning from the C
function, then there's no guarantees (since the garbage collection
I know this is not always safe because the garbage collector might
take the string after it is popped off this stack but in this
string still exists in the table and will not be collected until
"table" is collected (table is still on the stack). So is this
example safe or is the string from lua_getfield actually a different
string than the one in the table?