1. 内存对齐
1.1 定义(什么是内存对齐)
编译器为程序中的每个数据单元安排在适当的位置上,从而减少CPU访存次数,提高数据读取效率的一种方式。
1.2 原因(为什么要内存对齐):
平台移植:不同硬件平台不一定支持内存的随机存取,使用内存对齐可以保证每次访问都从块地址头部开始存取。
性能原因:为了访问未对齐的内存数据,处理器需要至少进行两次内存访问;而对齐的内存访问仅需要一次访问。
1.3 如何进行内存读取
32位系统采用的是4字节对齐方式,即从4字节的倍数地址开始读取数据,这样可以保证数据对齐,提高内存读取的效率。而基本数据类型的大小设置,保证了数据对齐后不会出现跨4字节的两次读取问题。
缺点:内存对齐没有充分利用存储空间,但是以空间换时间对于常见业务场景会更高效
// 空间换时间:
// 可以避免int a;int b;相邻同时加载到同一个cache行
// 然后同时失效导致cache miss概率增加
struct CacheTest{
int a;
char b[64];
int b;
};
1.4 内存对齐示例
#include<stdio.h>
struct Test {
char y;// 一个字节
int x;// 四个字节
};
int main() {
// 最大的按照最大对齐,其余的进行填充。输出为8
printf("%d\n",sizeof(Test));
return 0;
}
详细链接:
https://blog.csdn.net/qq_43840665/article/details/128424438
原文链接:https://blog.csdn.net/qq_43840665/article/details/128424438