含义:编译器将代码中的数据存储在若干字节的整数倍的地址指向的内存中。
自然对齐:变量存储的首地址正好是其数据类型大小的整数倍。
作用:
- 提高内存的访问效率
- 方便移植
规则:
- 结构体变量的首地址是其有效对齐值的整数倍
- 结构体中各成员首地址相对于结构体首地址的偏移量为该成员有效对齐值的整数倍
- 结构体总大小为结构体有效对齐值的整数倍
基本数据类型自身对齐值: 自身数据类型所占字节数
结构体类型自身对齐值:基本数据类型成员变量中自身对齐值最大的那个
有效对齐值:min{自身对齐值,指定对齐值}
指定对齐值:#pragma pack(value)指定的对齐值value
合理使用字节对齐可以节省结构体的占用空间。
#include <iostream>
using namespace std;
typedef struct stru_test {
char a;
int b;
char c;
}stru_test_s;
void test_for_byte_align() {
printf("==========test_for_byte_align==========\n");
stru_test_s stru_aaa;
cout << sizeof(stru_aaa) << endl;
printf("%p\n", &(stru_aaa));
printf("%p\n", &(stru_aaa.a));
printf("%p\n", &(stru_aaa.c));
printf("%p\n", &(stru_aaa.b));
}
void main()
{
test_for_byte_align();
}