【问题标题】:In Lua, how to determine the size of an object?在 Lua 中,如何确定对象的大小?
【发布时间】:2016-01-09 18:08:18
【问题描述】:

有没有办法在 Lua 中确定对象的(内存中)大小?

我在Gamepedia 上找到了一篇关于 Lua 对象内存大小的文章,但它并不笼统和精确。

【问题讨论】:

  • “什么时候可以存储一个表”?你有一个特定的功能,你称之为“推”表到那个存储?该池中究竟存储了什么?字符串化表? lua C-side table 对象本身(你会怎么做我不知道)。
  • MP 用作持久性存储(非易失性存储器),用于保存设置或其他信息,因此当保存在那里的信息更新时存储该表。例如,客户端-服务器系统,如果客户端没有成功将信息发送到服务器,它应该保留信息以便稍后发送,即使在客户端系统重新启动之后。信息以 JSON 格式保存。
  • 这设法提供了一些信息,但避免回答我的任何实际问题。请您仔细阅读我的问题并再试一次好吗?
  • 是的,有一个“推送”到 MP 的功能。什么时候?在易失性内存发生变化之后(如果易失性内存是一个队列,那么在出队或入队之后)。该池中究竟存储了什么?请参阅问题中的图形示例。
  • 所以您要将表的 JSON 字符串化版本存储到池中?有自定义功能?那么问题来了,JSON 字符串的大小是多少?

标签: memory memory-management lua


【解决方案1】:

我会给出与@NicolBolas 相同的explanation,但对问题的答案不同。

有没有办法在 Lua 中确定对象的(内存中)大小?

是的,但您可能需要为此使用外部模块。请参阅我的earlier answer,特别是lua-getsize 模块。

在 Lua 中有没有办法确定要存储的表是否大于 MP 大小?

如果您知道包含 X 元素的表格的大小,您可能可以推断出包含内容大致相同的 Y 元素的表格,但除非您使用自己的分配器,否则您将无法将分配限制为特定大小有这个逻辑。

【讨论】:

    【解决方案2】:

    在 Lua 中有没有办法确定要存储的表是否大于 MP 大小?

    没有。

    有没有办法在 Lua 中确定对象的(内存中)大小?

    没有。

    Lua 不负责限制内存等事情。这应该通过创建和管理 Lua 状态的 C 代码来处理。因此,如果您有 16MB 的限制,那么当您调用 lua_newstate 时,需要将其内置到 lua_State 中。您向它传递一个分配函数,该函数需要跟踪所有此类分配。它还会从内存池而不是堆中分配存储空间。

    当然,分配器不能准确地告诉为什么分配正在发生。因此,如果您打算让 Lua 状态也执行其他操作,则无法将这个特定表限制为 16MB。

    如果你对这一张表有如此特殊的内存需求,你可能需要在 C/C++ 中分配和存储它,然后使用 Lua 接口将它暴露给 Lua 读取/操纵。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2023-03-21
      • 2012-10-14
      • 1970-01-01
      相关资源
      最近更新 更多