在单片机开发中数组可以说是无处不在,在串口接收缓冲区,在IIC的发送中,SPI发送中,特别是DMA的发送,都是用于数组的。数中列举了组数的遍历,查找、都是日常的用法。但是数据的插入与扩容,基本没怎么用到。
在书中,作者写到了优点与局限性:
数组存储在连续的内存空间内,且元素类型相同。这种做法包含丰富的先验信息,系统可以利用这些信息来优化数据结构的操作效率。
- 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。
- 支持随机访问:数组允许在 O(1) 时间内访问任何元素。
- 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度。
连续空间存储是一把双刃剑,其存在以下局限性。
- 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。
- 长度不可变:数组在初始化后长度就固定了,扩容数组需要将所有数据复制到新数组,开销很大。
- 空间浪费:如果数组分配的大小超过实际所需,那么多余的空间就被浪费了。
对于作者以上的描述,在我们的单片机资源受限地环境下,所以前期对数据的规划就特别要注意,如串口缓冲区,还有比如LVGL的缓存的规划,就显得特别重要。
在我们使用DMA进行数据搬动时,也是跟上面讲的优点与局限有关系的。