目录
为什么存在内存对齐?
1.平台原因:某些平台只能在某些地址处取得特定的类型的数据;
2.性能原因:对齐的内存访问只需要一次;没有对齐的需要两次;
因此在声明的时候,就要把空间小的成员,集中放在一起;
不同编译器下的默认对齐数是不一样的:
vs编译器 默认对齐数是:8;
linux环境下没有默认对齐数,换言之,自身大小就是对齐数。
以下运行环境为vs编译器下运行;
结构体大小计算
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct S2
{
char c1; // 大小1 对齐数 1
int i; // 大小 4 对齐数 4
char c2; // 大小1 对齐数 1
};
int main()
{
struct S2 s;
printf("%d\n",sizeof(s));
return 0;
}