LuaJit如何增加堆栈/堆大小

3
我在LuaJit中一直遇到内存不足的错误。如何增加堆栈或堆大小?
谢谢。
1个回答

3

我自己没有使用过LuaJIT,除了一些玩具例子。但由于没有其他人提供答案...

从浏览文档得知,LuaJIT依赖于标准协程库的Coco扩展。 Coco引入的变化之一是创建新协程的函数现在带有可选参数,用于指定堆栈大小。

引用Coco文档:

coro = coroutine.create(f [, cstacksize])
func = coroutine.wrap(f [, cstacksize])

可选参数cstacksize 指定为协程分配的C堆栈的大小:

  • 如果未提供或为nil或0,则使用默认堆栈大小。
  • 如果为-1,则不分配C堆栈。
  • 任何其他值都将向上取整至最小大小(即使用1以获取最小大小)。

还有一个新函数coroutine.cstacksize([newdefault]),用于设置默认的C堆栈大小,以及一些相应的C API更改。

此外,LuaJIT版本的luaconf.h中有许多编译时配置选项。可能有一些设置默认值的选项。在Windows上,可执行文件的基本堆栈大小还可以通过MSVC的LINK.EXE和应用程序.DEF文件中的STACKSIZE语句进行链接时设置。


谢谢。我会尝试增加C编译器的堆栈大小并减小协程堆栈大小。 - jameszhao00
不行。我尝试将-Wl,--stacksize =标志注入ldargs,但似乎它正在忽略它。 - jameszhao00
我不确定减小协程堆栈大小是否有帮助。我考虑的是增加它...我没有看到任何控制初始线程堆栈大小的声明,如果它不是链接时间堆栈大小。但是,如果您有协程,并且其中一个正在报告堆栈不足,则需要将可用于至少该协程(如果不是全部)的堆栈大小增加。 - RBerteig
我曾认为每个线程都有一个固定的栈存储区,每个协程的模拟栈会占用其中一部分。因此,减少协程的模拟栈大小应该可以创建更多的协程。 - jameszhao00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接