1. 程式人生 > >Lua資料結構和記憶體佔用分析

Lua資料結構和記憶體佔用分析

  String又細分為短字串LUA_TSHRSTR和長字串LUA_TLNGSTR兩種,預設長度小於40的為LUA_TSHRSTR,使用全域性stringtable進行管理。即所有短字串都在stringtable中存放,相同字串只會有一份實際資料拷貝,每份相同的TString物件只是存放一個hash值,用來索引stringtable。而長字串則跟普通的GCObject沒有差別,相同字串在記憶體都是單獨一份資料拷貝。在Lua5.1中,沒有區分長短字串,所有的字串統一在stringtable中存在唯一拷貝。猜想這種改變一是因為長字串出現相同的情況比較少,二是lua5.1的方式長字串TString計算
Hash是抽取部分字元進行運算,這樣的計算方式可能被偽造導致不同字串的hash值一樣,但要是所有字元全用來計算hash又比較耗時。