我试图通过使用#pragma pack (n)
来调整数据成员。采取以下为例:#pragma pack(16)和#pragma pack(8)的效果总是一样吗?
#include <iostream>
using namespace std;
#pragma pack(8) // or (16)
struct A
{
int a;
char b;
char c;
char d;
char e;
char f;
double g;
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
双方将打印24
为#pragma pack(8)
和#pragma pack(16)
。我可以理解为n=8
与数据比对我的理解,其结果如下:
Bytes: |1 2 3 4|5|6|7|8|9|10 11 12 13 14 15 16|17 18 19 20 21 22 23 24|
Data: |a |b|c|d|e|f|padding |g |
但我不明白为什么结果还是24
为n=16
。我也尝试了其他的例子,他们似乎都给出了相同的结果n=8
和n=16
。有人能解释为什么吗?数据成员是否与n=8
相同?
附注:在Win-x64下测试VS2010。
谢谢。现在有道理。我在哪里可以找到*的参考?对于每个成员,它需要最小对齐,在成员的最佳对齐和包装值之间。 – herohuyongtao
'pragma pack'是一个编译器扩展。恐怕唯一的参考将是你链接到的页面。我引用的部分基本上是这样说的。 –