gpt4 book ai didi

c++ - 如何从 C++ 清除 lua 堆栈中的所有内容?

转载 作者:搜寻专家 更新时间:2023-10-31 00:37:23 26 4
gpt4 key购买 nike

虽然我通过尽可能少的时间调用 lua_getglobal 修复了这个错误,但从长远来看这还不够好。那么有谁知道如何清理 lua 堆栈中的所有内容以防止内存管理问题?

---编辑---
从我刚刚做的实验来看,lua_settop 会将表格清理到给定的值。然而,当我知道有多少项我想删除时,lua_pop 是否更有效?

最佳答案

一个简单的lua_settop(L, 0);应该可以解决问题。

一个简单但人为设计的示例,假设您有一个 lua_CFunction:

int foo(lua_State *L)
{
// marshal some random data
int bar = luaL_checknumber(L, 1);
const char *baz = luaL_checkstring(L, 2);
// do foo's task

// completely clear the stack before return
lua_settop(L, 0);
return 0;
}

这是人为设计的,因为如果 foo 被 VM 调用,则不需要清理。但是,如果您有直接调用 foo 的 C++ 代码,这可能是必要的。无论如何,希望这说明了它的调用上下文。

关于c++ - 如何从 C++ 清除 lua 堆栈中的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com