【问题标题】:LuaJit increase stack/heap sizeLuaJit 增加堆栈/堆大小
【发布时间】:2010-11-24 04:25:25
【问题描述】:

我在 LuaJit 中不断收到内存不足的错误。如何增加堆栈或堆大小?

谢谢

【问题讨论】:

    标签: memory lua heap-memory stack-memory luajit


    【解决方案1】:

    我自己没有使用过 LuaJIT,除了玩具示例。但是由于没有其他人提供任何答案......

    通过浏览documentation,LuaJIT 依赖于标准协程库的 Coco 扩展。 Coco 引入的变化之一是创建新协程的函数现在采用一个可选参数来指定堆栈大小。

    引用 Coco 文档:

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

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

    • 如果没有给出cstacksize 或者是nil 或 零。
    • 如果cstacksize 是-1,则不分配C 堆栈。
    • 任何其他值都被四舍五入到最小大小(即使用1 得到 最小尺寸)。

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

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

    【讨论】:

    • 谢谢。我将尝试增加 c 编译器堆栈大小并减小协程堆栈大小。
    • 没有骰子。我尝试将 -Wl,--stacksize= 标志注入 ldargs 但它似乎忽略了它。
    • 我不确定减小协程堆栈大小是否会有所帮助。我想增加它...如果不是链接时堆栈大小,我没有看到任何控制初始线程堆栈大小的声明。但是,如果您有协程并且其中一个报告出堆栈,那么您需要增加至少该协程可用的堆栈大小(如果不是全部)。
    • 我认为每个线程的堆栈存储是固定的,每个协程的模拟堆栈都占用了其中的一部分。因此减少协程的模拟堆栈大小应该允许创建更多的协程。
    猜你喜欢
    • 2015-11-22
    • 2013-12-24
    • 2011-09-29
    • 2012-02-10
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多