在lua中用union TString來表示字符串類型
lobject.h:
其中結構體tsv中 reserved字段表示字符串是不是保留關鍵字,hash是其哈希值,len是其長度。我們在TString中沒有看到lua將字符串的內容存在任何地方啊,其實lua是將內容同一存在了另一個地方,global_state中的strt裡面:
lstate.h:
lstate.h:
其中字段hash為二維數組,這裡面保存了lua中所有的字符串。接下來讓我們來看看lua是怎樣生成一個字符串的吧:
lstring.h:
lua利用luaS_new來new一個string,而真正new string的是在函數luaS_newlstr中:
lstring.c:
首先計算出字符串的hash值,然後代碼G(L)->strt.hash[lmod(h, G(L)->strt.size)]找出hash的對應位置,這個哈希表是鏈表實現的,因此在for循環中查找鏈表,當鏈表中已經存在對應的字符串時做一些判斷然後返回這個已經存在的字符串指針TString *,若不存在則使用newlstr來new一個字符串並將其加到global_state中的strt中。
lstring.c:
Lua 語言 15 分鐘快速入門 http://www.linuxidc.com/Linux/2013-06/86582.htm
Lua程序設計(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htm
Lua程序設計(第二版)閱讀筆記 http://www.linuxidc.com/Linux/2013-03/81834.htm
NetBSD 將支持用 Lua 腳本開發內核組件 http://www.linuxidc.com/Linux/2013-02/79527.htm
CentOS 編譯安裝 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm
Lua 的詳細介紹:請點這裡
Lua 的下載地址:請點這裡