iOS NSMutableArray底层实现-环形缓冲区

NSMutableArray的底层原理

_used 是计数的意思

_list 是缓冲区指针

_size 是缓冲区的大小

_offset 是在缓冲区里的数组的第一个元素索引

数据结构

正如你会猜测的,__NSArrayM 用了环形缓冲区 (circular buffer)。这个数据结构相当简单,只是比常规数组或缓冲区复杂点。环形缓冲区的内容能在到达任意一端时绕向另一端。

除非缓冲区满了,否则在任意一端插入或删除均不会要求移动任何内存。

任意一端插入或者删除,只是修改offset参数,不需要移动内存,

我们访问的时候只是不和普通的数组一样index多少就是多少,这里会计算加上offset之后处理的值取数据, 而不是插入头和尾巴的时候,环形结构会根据最少移动内存指针的方式插入,


例如要在A和B之间插入,按照C语言的数组,我们需要把B到E的元素移动内存,但是环形缓冲区的设计,我们只要把A的值向前移动一个单位内存,即可,同时修改offset偏移量,就能保证最小的移动单元来完成中间插入。

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