2009-08-30 150 views

回答

3

我没有使用LuaJIT自己,除了玩具的例子。但由于没有人提供了任何答案,所以... ...

从略读documentation,LuaJIT依赖于标准协程库的Coco扩展。 Coco引入的其中一个变化是,创建新协程的函数现在采用指定堆栈大小的可选参数。

引述可可文档:

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

可选参数cstacksize 指定C堆栈到 大小分配用于协程:

  • 默认如果没有给出cstacksize或者为0,则使用堆栈大小或 零。
  • 如果cstacksize-1,则不分配C堆栈。
  • 任何其他值均向上舍入到最小大小(即使用1获得 的最小大小)。

还有新功能coroutine.cstacksize([newdefault]),设定缺省的C堆栈大小,以及对C API一些相应的变化。

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

+0

谢谢。我会尝试增加C编译器堆栈大小并减小协程堆栈大小。 – jameszhao00 2009-08-31 22:53:14

+0

没有骰子。我尝试在ldargs中注入-Wl, - stacksize =标志,但它似乎忽略了它。 – jameszhao00 2009-08-31 23:28:02

+0

我不确定*减少*协程栈大小会有所帮助。我想到了*增加*它......我没有看到任何控制初始线程堆栈大小的声明,如果它不是链接时间堆栈大小的话。但是如果你有协同程序,并且它是其中一个报告堆栈不足的话,那么你需要增加可用的协议栈大小,如果不是全部的话。 – RBerteig 2009-09-01 02:18:54