2015-08-17 64 views
2

lua_newuserdata如何對齊分配的內存?它依賴於malloc/calloc,還是它做它自己的東西?有什麼辦法可以保證對齊而不必爲此添加代碼?Lua用戶數據對齊

自己編寫對齊代碼不是問題,但如果不需要,那我當然不會。

+0

看來,Lua使用標準的C realloc()函數,並沒有執行額外的對齊。 –

+0

謝謝,我會寫我自己的對齊碼。 – Thorham

+0

實際上,Lua *自己對用戶數據的有效載荷進行對齊。你不可能獲得比分配器更多的連接,但你可以減少。參見[userdata的定義](http://www.lua.org/source/5.3/lobject.h.html#Udata),特別是['L_Umaxalign'](http://www.lua.org/源/ 5.3/llimits.h.html#L_Umaxalign)。後者還允許您更改該對齊。 – siffiejoe

回答

3

Lua中的所有內存分配都是在您使用lua_newstate創建狀態時給出的user-supplied allocator中完成的。

如果您使用luaL_newstate而不是lua_newstate,則Lua會使用a memory allocator based on realloc

+0

值得一提的是,分配器回調函數給出了關於內存用途的提示。請參閱http://www.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中的任何一個。 「 – peterpi

+0

我會檢查出這些用戶分配器,謝謝。 – Thorham