lua 原始碼閱讀 1 1 2 1

2022-03-14 09:11:20 字數 1675 閱讀 6869

lua 1.1 閱讀

1. hash.c 中

a) 對建立的 hash *array 用 listhead 鏈式結構來管理,新增lua_hashcollector,用來做 hash 的**處理。

ps: 1.0 用的是個 512 的陣列,用乙個少乙個

b) hash *lua_createarray (int nhash) 中新增閥值,用來控制何時進行記憶體**

4.3 lua 2.1 閱讀

1. static treenode *tree_next (treenode *node, char *str) 的**的簡單化

2. 常量陣列還是常量陣列,但是結構變了

3. 符號陣列演化成了還是乙個普通陣列,這塊很有意思,構造是去常量樹中確認符號名,原來的 name 字段不用了。

luai_findsymbol 中做了很多事, node 如果是新的,就加入陣列中,之後和正常情況一樣返陣列下標, 這塊用陣列和常量樹來構造符號表。

lua_constcreate(name) : constant_root 樹中遍歷,如果沒,就加進去,之後返回節點

luai_findsymbol(treenode* t) : 常量樹中的節點,如果是新的節點,就要在符號表中加入一條記錄,節點記錄符號表中的index,這樣查詢時檢索的是常量樹

4. stringbuffer 由陣列變成鏈式結構, 這個主要在 lua 要存乙個 string 的時候要呼叫, 比如 contact, lua_tostring, lua_pushstring。

5. hash 錶鏈不再使用,1.1 也只是保留

v1.1

extern hash **lua_array;

extern word lua_narray;

6. lock 是乙個陣列標識,lua 的原始碼都是動態擴

7. hash 也做了變遷,由陣列變成 list

1.1  

2.18. lua 的異常處理

設定了一點回歸點,異常就跳過去

jup_buf *errorjmp;

setjmp + longjmp 來實現

9. 關於 lockarray

目前應該是沒完全看明白,**中就是把乙個物件壓入棧和 lockarray 中(物件的 tag 不能為 lua_t_nil), 而 lua_unlock 就是把 lockarray[index].tag 置 為 lua_t_nil

v2.1 的**調動只是在**中把 old_pow 作為 lockarray 的索引來傳遞

10. 官方 readme 變更說明

* changes since version 1.1 (current version is 2.1)

+ object-oriented support;

+ fallbacks;

+ simplified syntax for tables;

+ many internal improvements.

ps: 因為物件導向程式設計自己一直沒怎麼寫過,只有一點概念,封裝,繼承,多型。

封裝比較好理解,就是把成員和一些方法整合到乙個記憶體塊中

繼承:: obja : objb, a 中有個base 指標指向b

多型: 不同的物件有唯一的標識,當訪問某個方法時,會找到物件真實的方法,結構可以用 hash 來儲存

2.1 的**沒看到有對 物件相關的操作

LUA 原始碼閱讀筆記(一)

背景介紹 因為工作的需要,後台svr要能夠動態修改更新,使用c當然沒有問題,問題就在於修改原始碼後,需要重啟服務。所以就想到在c裡能夠嵌入一種指令碼,最好是和c無縫結合的。因此就想到使用到lua,lua的大名圈內人士應該早有耳聞,只不過一直沒有機會接觸。機緣巧合,有幸一見。俗話說得好,耳聞不如一見。...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Lua原始碼閱讀三 lua字串快取

本篇文章,主要 一下lua中的字串快取管理 涉及到的檔案 lstring.c 在lua的9種資料型別中,字串是屬於可以被gc 的型別。在lua中,操作字串實際上是在操作字串引用,當字串不在被使用的時候,gc會通過一定演算法 lua9種資料型別 字串分配 原始碼 ts cast tstring lua...