关于Lua Stack的问题

2026/08 12 19:08

问题

在Lua中调用一个C函数,此C函数需要返回一批(>1000个)整数数值

方法1 – 直接压栈处理

static int lua_get_valus(lua_State* L)
{
  for(int i=0; i<1000; ++i)
  {
    lua_pushinteger(L, i);
  }   
  return 1000;
}

表现:会导致lua栈溢出,内存各种异常。

方法2 – 栈扩容

static int lua_get_valus(lua_State* L)
{
  lua_checkstack(L, 1000); // 扩容,不崩了
  for(int i=0; i<1000; ++i)
  {
    lua_pushinteger(L, i);
  }   
  return 1000;
}

方法3 – 用Table传递

lua_newtable(L);
auto tp = lua_gettop(m_L);
for(int i=0; i<1000; ++i)
{
  lua_pushnumber(L, i);
  lua_rawseti(L, tp, nextIdx+1);
}
return 1