|
对struct数据对齐与#pragma pack(n)的理解一直存在误区,这里做一个总结,便于以后记忆。 规则主要有两条: 1.结构,联合或者类的数据成员,第一个放在偏移为0的地方,以后每一个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员的自身长度来定,取较小的那个。 2.对于整体结构的对齐,则按照结构体中最大数据成员和#pragma pack的大小来定,去较小的那个。 以下是测试代码: Cpp代码 #include using namespace std; struct test { short a; short b; int c; char d; }; #pragma pack(4) struct test2 { char a; short b; char c; }; #pragma pack() struct s1 { short a; long b; }; struct s2 { char c; s1 d; long long e; }; #pragma pack(4) struct s3 { int a; char b; short c; char d; }; struct s4 { char a; short b; char c; }; #pragma pack() #pragma pack(2) struct s5 { int a; char b; short c; char d; }; #pragma pack() int main() { cout< cout< cout< cout< cout< cout< cout< unsigned int ccc; cout< }
作者“plussai”
|