2009-08-30 149 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