美文网首页
iOS NSMutableArray底层实现-环形缓冲区

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

作者: XLsn0w | 来源:发表于2021-08-18 10:45 被阅读0次

NSMutableArray的底层原理

_used 是计数的意思

_list 是缓冲区指针

_size 是缓冲区的大小

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

数据结构

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

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

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

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


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

相关文章

网友评论

      本文标题:iOS NSMutableArray底层实现-环形缓冲区

      本文链接:https://www.haomeiwen.com/subject/apcgbltx.html