为什么 LuaJIT 在 64 位平台上的内存限制为 1-2 GB?

2023-11-27

在 64 位平台上,LuaJIT 最多只允许 1-2GB 的数据(不包括分配的对象)malloc)。这个限制从何而来?为什么这个限制比 32 位平台上的还要少?


LuaJIT 被设计为使用 32 位指针。在x64平台的限制来自于使用mmapMAP_32BIT flag.

MAP_32BIT(自 Linux 2.4.20、2.6 起):

将映射放入进程地址空间的前 2 GB 中。对于 64 位程序,此标志仅在 x86-64 上受支持。添加它是为了允许在前 2GB 内存中的某个位置分配线程堆栈,从而提高某些早期 64 位处理器上的上下文切换性能。

本质上,使用此标志仅限于前 31 位,而不是顾名思义的前 32 位。看一看here有关 1GB 限制的详细概述,请使用MAP_32BIT在Linux内核中。

即使您可以拥有超过 1GB,LuaJIT 作者也解释了为什么这会影响性能:

  • 完整的 GC 比分配本身多花费 50% 的时间。
  • 如果启用 GC,分配时间会加倍。
  • 为了模拟真实的应用程序,对象之间的链接在第三次运行中被随机化。这使得 GC 时间加倍!

那只是 1GB!现在想象一下使用 8GB —— 一个完整的 GC 周期将使 CPU 忙碌长达 24 秒! 好的,那么正常模式就是使用增量GC。但这仅仅意味着开销高出约 30%,它混合在分配之间,并且每次都会逐出 CPU 缓存。基本上你的应用程序将由 GC 开销主导,你会开始想知道为什么它很慢......

tl;dr 版本:不要在家尝试这个。并且GC需要重写(推迟到LuaJIT 2.1)。

总而言之,1GB 限制是 Linux 内核和 LuaJIT 垃圾收集器的限制。这仅适用于 LuaJIT 状态内的对象,并且可以通过使用来克服malloc,它将在低 32 位地址空间之外进行分配。此外,还可以使用x86建立在x64在 32 位模式下,可以访问完整的 4GB。

查看这些链接以获取更多信息:

  • 如何在 Linux 上突破 64 位 LuaJIT 的 1GB 内存限制?
  • LuaJIT x64 仅限于 31 位地址空间,即使没有 MAP_32BIT 限制?
  • LuaJIT奇怪的内存限制
  • 挖掘 2008 年以来你从未听说过的最疯狂的 bug:Linux 线程回归
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 LuaJIT 在 64 位平台上的内存限制为 1-2 GB? 的相关文章

  • Lua中如何对数字表求和?

    Lua有内置的吗sum 功能 我似乎找不到一个 我几乎翻遍了文档中的所有地方 或许table sum 或类似的东西 以遵循当前的约定 但由于我找不到它 我不得不实现它 function sum t local sum 0 for k v i
  • 我应该用 C++ 封装 Lua 代码的哪些代码?

    我终于将 LuaBind 配置为与我的 C 项目一起使用 我最近发现 Tiled 地图编辑器可以选择将文件导出为 lua 所以我想尝试一下 我将使用什么代码来封装下面粘贴的代码以使其与我的 C RPG 项目一起使用 return versi
  • 使用 corona sdk 验证电子邮件地址

    在我的项目中 有一个供用户填写详细信息的表单 其中有一个文本字段用于输入用户的电子邮件 ID 所以我需要在 corona 项目中验证该文本字段中的电子邮件 试试这个正则表达式 local email email protected cdn
  • 如何解密Lua字节码?

    早上好 我正在尝试破译 Moon 字节码 但我无法以任何方式 有人可以帮助我吗 我有这个 例如 code 27 76 117 97 81 0 1 4 4 4 8 0 如何将此字节码解密为文本 我已经在这里搜索 http www asciit
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • Lua userdata:无法同时进行数组访问和方法

    我遇到了这个人的问题 Lua userdata数组访问及方法 https stackoverflow com questions 26970316 lua userdata array access and methods 其中 当我设置用
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 检查多个位置的值并仅在源唯一时返回匹配项

    假设我有一个清单Vendors 阿斯达 乐购 Spar 我有一个清单Sources 或者这个类比中的供应商 家乐氏 Kellogg 吉百利 Cadbury 雀巢 Nestle 强生 Johnsons 帮宝适 Pampers Simple 等
  • 如何在 emacs lua-mode 中配置缩进?

    完整的 emacs 新手在这里 我在 Ubuntu 上使用 emacs 23 1 1emacs 入门套件 https github com technomancy emacs starter kit 我主要在 lua 模式下工作 安装了pa
  • Lua C API:初始化结构体 C 中的变量矩阵

    我正在尝试使用 Lua C API 创建一个用户数据 并在其中关联一个元表 我将在其中收集矩阵 我无法得到的是如何将初始化矩阵的每个分量设置为零 我按照我的描述编译我的 Lua 模块 C 代码here https stackoverflow
  • Lua 上的 For 循环

    我的作业是如何执行 for 循环 我已经从数字上弄清楚了 但无法从名称上弄清楚 我想创建一个 for 循环来运行名称列表 以下是我到目前为止所拥有的 names John Joe Steve for names 1 3 do print n
  • SHA2 512 的改编给出了不正确的结果

    我正在尝试调整 SecureHashAlgorithm 的纯 Lua 实现here http lua users org wiki SecureHashAlgorithm对于 SHA2 512 而不是 SHA2 256 当我尝试使用改编时
  • 如何使用 Lua 运行可执行文件?

    我有一个可执行文件想要使用 Lua 运行 我该怎么做 似乎无法在任何地方找到有关此的任何文档 您可以使用 Lua 原生的 执行 命令 Example os execute c temp program exe 资料来源 Lua 指南 os
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • Tarantool 中的冲突解决(如何在发生冲突时修复主-主模式下的复制)

    在多master场景下使用Tarantool如何实现冲突解决 我正在开发一项应该具有高可用性的服务 因此决定使用 nginx 作为 tarantool 两个节点 禁用只读选项 的负载均衡器 带有备份指令 它会重试对其他节点的失败请求 但如果
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • 如何从表成员中引用lua表成员?

    我在 lua 有一张表 enUS LOCALE STHOUSANDS Thousands separator e g comma patNumber d LOCALE STHOUSANDS d regex to find a number
  • 如何将 Lua 粘合到 C++ 代码?

    您使用 Luabind toLua 或其他库 如果使用 是哪一个 还是根本不使用 每种方法都有哪些优点和缺点 我不太同意 自己投票 将基本类型和静态 C 函数绑定到 Lua 是微不足道的 是的 但是当你开始处理表和元表时 情况就会发生变化
  • 在 Lua 中更改元表会破坏冒号运算符

    在学习Lua的过程中 我借用了一些代码here http lua users org wiki StringIndexing使用字符串索引 正是这样 getmetatable index function str i return stri

随机推荐

  • 解析 xml 时出错:与 Facebook SDK 未绑定前缀

    我的项目无法识别 xml 中的 com facebook widget ProfilePictureView 或其他小部件 我导入了 facebook sdk 甚至用它来登录并与 open graph 交互 这一切都有效 我只是想添加一个个
  • 如何用D3添加简单的圆弧

    我想在图表部分添加一个简单的弧线 如圆 vis append circle style stroke gray style fill white attr r 40 attr cx 50 attr cy 50 所提供的D3的例子正在处理数据
  • 如何在for循环中使用setInterval函数

    我正在尝试在给定可变项目列表的情况下运行多个计时器 代码看起来像这样 var list Array for var x in list setInterval function list x 10 console log x gt list
  • 在堆栈跟踪中获取 VB.NET 行号

    我有一个 VB NET 2010 Winforms 应用程序 我想在堆栈跟踪中包含行号 我已阅读以下问题和答案 如何在VB net中运行应用程序时打印行号 其中提到 您始终需要在代码中包含 PDB 文件 其中包含在此类情况下使用的调试信息
  • Git 中的 commit-ish 和 tree-ish 是什么?

    问题 Git 中 commit ish 和 tree ish 的具体例子有哪些 堆栈溢出问题 git 中的 tree ish 是什么意思 交易 特别是树型 但我想了解更多both 背景 文档中的用法 Git 文档多次提到 commit is
  • Microsoft Edge window.open() 不支持宽度高度,并在后台打开

    我使用的是 Windows 10 预览版 Build 10130 并且window open新 Edge 浏览器中的方法的行为不符合规范 如果您使用示例代码https msdn microsoft com en us library ms5
  • 如何设置 Filezilla Pro 来访问我的 s3 存储桶?

    我购买了支持 Amazon S3 的 Filezilla Pro 请问如何设置 Filezilla Pro 访问我的存储桶 谢谢 对上述答案的一个重要补充 我的 S3 用户名和密码是什么 用户名 访问密钥 最好是仅具有访问特定 S3 存储桶
  • iPhone SDK 与静态库链接错误

    我已经构建了自己的静态库 其中包含要在项目中重用的组件 最近需要更新一堆类 具体来说 由于某些类更改了名称 某些方法的签名也发生了更改 现在发生的情况是 该库本身可以正常编译 但是 当添加到应用程序项目时 该项目无法链接 Ld build
  • javascript - 获取函数内异步函数的返回数据

    我遇到问题 因为 chrome api 函数是异步的 我无法获取其返回值 考虑以下代码 我正在使用 AngularJS scope storageGet function param var returnData chrome storag
  • 使用 itextsharp 阅读 PDF,其中 PDF 语言为非英语

    我正在尝试阅读thisPDF 使用 C 中的 itextsharp 将此 pdf 转换为 word 文件 它还需要维护Word中的表格格式和字体 当我尝试使用英语 pdf 时 它会完美工作 但使用一些印度语言 如印地语 马拉地语 时 它不起
  • jqgrid 添加行并将数据发送到 webservice 进行插入

    我已经能够使用 jQuery Ajax 将数据从 Web 服务中提取到 jQGrid 中 现在我想将添加 编辑的数据发送回网络服务 我已经看过一些使用 PHP 和 editurl 命令的示例 这也适用于网络服务吗 就像我最初提取数据的方式一
  • 使用 Reactive Banana 进行一些基本微积分

    Setup 我正在使用 Reactive Banana 和 OpenGL 并且我有一个想要旋转的齿轮 我有以下信号 bTime Behavior t Int the time in ms from start of rendering bA
  • SwiftUI UITextView 协调器不工作

    我包了一个UITextView in a UIViewRepresentable并包括一个Coordinator as UITextViewDelegate 但事件未被调用 我究竟做错了什么 struct TextView UIViewRe
  • Session ID 是在服务器端还是客户端生成的?

    这个网页http www w3schools com ASP prop sessionid asp表明会话 ID 是在服务器端生成的 如果是这种情况 那么服务器如何知道它在第二个请求响应周期仍然是同一个客户端 SessionId 肯定会在客
  • 安装 CMake 库:还为依赖项提供查找模块?

    我的 CMake 库 MyLibrary 具有依赖性OtherLibrary 我用一个导入非标准 FindOtherLibrary cmake 我的图书馆取决于OtherLibrary公开 target link libraries MyL
  • MVC4 区域和表单身份验证

    我有一个设置了多个区域的 MVC4 应用程序 每个区域必须有自己的登录页面 举例来说 我有以下领域 主要的 行政 如何设置才能使 主要 区域与 管理 区域具有不同的登录页面 我认为 web config 不是解决这个问题的方法 目前我的根
  • 如何在没有嵌套订阅的情况下订阅命令执行信号的完成?

    我尝试了以下操作但没有成功 等效使用 subscribeNext 按预期工作 A viewModel loginCommand executionSignals flatten subscribeCompleted NSLog A 我唯一的
  • 如何在r中从类别转换为数字

    这是我的问题 我有一个包含类别的表格 我想对它们进行排名 category dog cat fish dog dog 我想要的是添加一列并对它们进行排名 category rank dog 1 cat 2 fish 3 dog 1 dog
  • 使用 GHC 的 API 或提示从已编译的二进制文件导入已知函数

    我有一个模块Target 有一个函数Target accessMe在里面 我以某种方式编译这个模块 然后删除源代码 现在 我必须执行哪些神秘咒语才能动态导入不同的程序Target accessMe 这个程序知道accessMe提前输入 另外
  • 为什么 LuaJIT 在 64 位平台上的内存限制为 1-2 GB?

    在 64 位平台上 LuaJIT 最多只允许 1 2GB 的数据 不包括分配的对象 malloc 这个限制从何而来 为什么这个限制比 32 位平台上的还要少 LuaJIT 被设计为使用 32 位指针 在x64平台的限制来自于使用mmap和M