【问题标题】:Lua userdata alignmentLua 用户数据对齐
【发布时间】:2015-11-09 21:07:11
【问题描述】:

lua_newuserdata 如何对齐分配的内存?它依赖于 malloc/calloc,还是它自己做的事情?有什么方法可以保证对齐而不需要为此添加代码?

自己编写对齐代码不是问题,但如果不需要,那我当然不想这样做。

【问题讨论】:

  • Lua 好像使用了标准的 C realloc() 函数,并没有进行额外的对齐。
  • 谢谢,那我自己写对齐代码。
  • 实际上,Lua 确实对用户数据的有效负载进行了对齐。你不能得到比分配器给你更多的对齐,但你可以得到更少。参见the definition of userdata,尤其是L_Umaxalign。后者还允许您更改对齐方式。

标签: memory lua alignment allocation


【解决方案1】:

Lua 中的所有内存分配都是在您使用lua_newstate 创建状态时给定的user-supplied allocator 中完成的。

如果你使用luaL_newstate而不是lua_newstate,那么Lua使用a memory allocator based on realloc

【讨论】:

  • 值得补充的是,分配器回调会提示有关内存的用途。见lua.org/manual/5.3/manual.html#lua_Alloc。特别是:“当 ptr 为 NULL 时,osize 对 Lua 分配的对象类型进行编码。当(且仅当)Lua 创建该类型的新对象时,osize 是 LUA_TSTRING、LUA_TTABLE、LUA_TFUNCTION、LUA_TUSERDATA 或 LUA_TTHREAD 中的任何一个。 "
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多