Lua pairs与ipairs效率分析
介于大家目前有些人比較關心 lua table中pairs 和 ipairs的效率問題, 特此研究了一下... 如有不正 還需指出..?
 首先來看下 lua中table的結構定義:
 table中分為2個存儲空間, 一個是線性數組空間(TValue *array), 和一個hash空間(Node *node)
 當我們使用 pairs 和 ipairs 會產生兩種不同的迭代器, 一個僅僅遍歷數組, 一個遍歷所有的值
?
?
?
 所以, 當調用ipairs的時候, 在線性數組中遇到第一個nil時便停止遍歷, 不管后面還是否有值, 這點在遍歷的時候要格外注意
 而pairs的迭代器會調用lua_next, lua_next的實現:
 這個函數會根據top信息調用luaH_next獲取當前table中的下一組鍵值, 那么關鍵就在luaH_next中, 來看看這個函數的實現:
 我們粗略的可以看到, 這個函數會先計算索引位置, 并根據該位置優先從線性數組中查找, 如果沒有找到, 再從hash表中查找, 所以如果用pairs遍歷array, 實則和ipairs等效, 并無差異.
 所以, 由上面的分析, 如果我們明確table中的數據全部存放在線性數組中, 調用ipairs或者pairs均可, 并無太大差異(注意ipairs時中間不要出現nil值, 否則會導致遍歷中斷), 如果我們明確遍歷hash表中的值, 則使用pairs, 其效率會較遍歷array中的差
 簡單測試 遍歷500 000 000個array or hash value的效率:
?
由于使用了os.time() , 只能獲取到秒級時間, 故精確度不算太高...
?
轉載自:https://blog.csdn.net/tony7758/article/details/6334001
總結
以上是生活随笔為你收集整理的Lua pairs与ipairs效率分析的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Oracle中的触发器
- 下一篇: 梯度弥散
