iOS NSMutableArray底層實現-環形緩衝區

NSMutableArray的底層原理

_used 是計數的意思

_list 是緩衝區指針

_size 是緩衝區的大小

_offset 是在緩衝區裏的數組的第一個元素索引

數據結構

正如你會猜測的,__NSArrayM 用了環形緩衝區 (circular buffer)。這個數據結構相當簡單,只是比常規數組或緩衝區複雜點。環形緩衝區的內容能在到達任意一端時繞向另一端。

除非緩衝區滿了,否則在任意一端插入或刪除均不會要求移動任何內存。

任意一端插入或者刪除,只是修改offset參數,不需要移動內存,

我們訪問的時候只是不和普通的數組一樣index多少就是多少,這裏會計算加上offset之後處理的值取數據, 而不是插入頭和尾巴的時候,環形結構會根據最少移動內存指針的方式插入,


例如要在A和B之間插入,按照C語言的數組,我們需要把B到E的元素移動內存,但是環形緩衝區的設計,我們只要把A的值向前移動一個單位內存,即可,同時修改offset偏移量,就能保證最小的移動單元來完成中間插入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章