Skip to content

4.1.3 - 字符串指针

API中的有些函数会在栈中返回一个指向Lua字符串的指针(const char*)。(参见辅助库中的lua_pushfstringlua_pushlstringlua_pushstringlua_tolstring。)

通常来说,Lua的GC可以释放或移动内部内存和已失效的内部字符串指针。为了安全地使用这些指针,只要字符串值的索引没有从栈中移除,那么API就会保证在所有栈内索引此字符串的指针有效。(尽管它可以移动到另一个索引上。)当索引是一个伪索引(引用的是一个上值)时,只要相关调用仍然活跃且相关上值没有被改动,其指针就是有效的。

调试接口中有些函数也可以返回字符串指针,它们分别是lua_getlocallua_getupvalue以及lua_setupvalue。对于这些函数,只要这个函数调用仍在活跃且所给(如果有)闭包还在栈中,那么其指针保证有效。

在这些保证之外的情况下,GC可以自由决定内部字符串的指针是否有效。