我们在自己写内存申请函数的时候经常会有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字节的数据, 再组合 2,3,4,5字节才能得到数据2 总结:很明显,场景2读取数据比场景1繁琐许多。 如果不做内存对齐,cpu在读取内存数据时,会增加许多耗时的动作。 而做了内存对齐后,虽然会产生一部分内存碎片,但极大提高了cpu访问内存数据的速度,属于空间换时间的做法 提高访问速度是内存对齐的原因之一,另外一个原因是某些平台(arm)不支持未内存对齐的访问
标签:为什么,场景,字节,内存,对齐,数据,读取 From: https://www.cnblogs.com/8335IT/p/17116571.html