我試圖通過使用#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'是一個編譯器擴展。恐怕唯一的參考將是你鏈接到的頁面。我引用的部分基本上是這樣說的。 –