为什么要做内存对齐

我们在自己写内存申请函数的时候经常会有2字节、4字节、8字节等的内存对齐.但是为什么要做内存对齐呢?

來源:哥斯拉啊啊啊哦

CPU访问内存是按照内存块进行读写的,内存块可能并不只是一个自己,而是一个(多个字节组成的)连续的块;

 内存对齐 是将特定的数据类型按照一定的规则摆放在内存上,以此 提高cpu访问内存的速度

 

 

如上图,内存访问颗粒度为4,数据大小为4字节的场景:

场景1:做了内存对齐,index 2-3 补充空字节,这样 数据1,数据2 都刚好只存在一个内存块中,
读取数据时,一次就能将数据读取完毕

场景2:没有内存对齐,数据2 一部分存在内存块1中,一部分存在内存块2中。
读取数据2时,需要将块1的数据0-3读取出来,丢弃0-1字节数据,
再读取块2的数据4-7,丢弃6-7字节的数据,
再组合 234,5字节才能得到数据2

总结:很明显,场景2读取数据比场景1繁琐许多。
如果不做内存对齐,cpu在读取内存数据时,会增加许多耗时的动作。
而做了内存对齐后,虽然会产生一部分内存碎片,但极大提高了cpu访问内存数据的速度,属于空间换时间的做法

提高访问速度是内存对齐的原因之一,另外一个原因是某些平台(arm)不支持未内存对齐的访问

 

posted on 2023-02-13 15:30  邗影  阅读(97)  评论(0编辑  收藏  举报

导航