一、lua_State 创建
C/C++ 与 Lua 的交互是通过 lua_State
这一句柄进行交互。我们常规的创建都是通过 luaL_newstate
这一辅助函数,他的源码实现如下:
LUALIB_API lua_State *luaL_newstate (void) {
lua_State *L = lua_newstate(l_alloc, NULL);
if (l_likely(L)) {
lua_atpanic(L, &panic);
lua_setwarnf(L, warnfoff, L); /* default is warnings off */
}
return L;
}
通过源码可以知道,真正的创建是通过 lua_newstate
函数
LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud)
描述
函数创建并返回 lua_State
类型的指针,后续通过这一指针和 Lua 进行交互。这期间所有的内存分配和释放都会由参数 f 函数进行完成,包括该函数返回的 lua_State 。
参数
- 参数 f :分配函数
- 参数 ud :自定义用户数据,会携带进入 f 函数
返回值:
lua_State 的指针
二、分配函数
Lua 中默认的分配函数使用了 C 语言标准函数库的标准函数 malloc-realloc-free
进行内存的管理,以下便是 Lua 默认分配函数。
static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud; (void)osize; /* not used */
if (nsize == 0) {
free(ptr);
return NULL;
}
else
return realloc(ptr, nsize