适用情景:
struct,union,class等复合(aggregate)数据类型
语法:
#pragma pack(n) // n = 1, 2, 4, 8, 16
struct S { // 注意:此处必须是结构体的声明
short a;
long b;
char c;
...
};
#pragma pack() // 设置回默认值,一般为8
内存对齐的好处:
对于一些硬件平台适当的对齐能够提高存取效率
内存对齐规则:
1. 从复合数据类型的第一个成员开始
2. 对齐值取MIN(当前数据成员的字节长度,#pragma pack中指定的值)
3. 复合数据类型作为数据成员时,“字节长度”定义为所包含的成员的最大字节长度
个人感觉比较详尽和清楚的解释:
http://www.sf.org.cn/Article/base/200509/260.html
http://xiekeli.blogbus.com/logs/148537651.html