考慮下面的程序:爲什麼g ++不在這裏執行結構打包?
#include <iostream>
struct __attribute__((__packed__)) mystruct_A
{
char a;
int b;
char c;
}x;
int main()
{
std::cout<<sizeof(x)<<'\n';
}
從this我的理解如下:
- 結構包裝抑制結構的填充,當 對準最重要用於填充,包裝使用時,空間最重要的。
- 結構包裝,而另一方面防止編譯器做 填充
我使用Windows 7操作系統的32位環境&。鏈接問題的第一個答案表示,上述代碼將在32位體系結構上生成大小爲6的結構。
但是當我使用g ++ 4.8.1編譯它時,它給了我9作爲輸出。那麼,這裏的結構包裝是不是完全發生了? 爲什麼輸出中還有3個字節? sizeof char始終爲1.在我的編譯器中,Sizeof int是4。所以,當結構打包時,sizeof上面的struct應該是1 + 4 + 1 = 6。我試過here。它給了我期望的輸出6.
處理器是否有任何作用或僅取決於編譯器?
鏘給人尺寸6. –
@JohnZwinck:請附上鍊接,如果你測試它譁。 – Destructor
我在我的Macbook 64-bit Clang 3.5上測試了它。 –