2015-09-27 43 views
2

考慮下面的程序:爲什麼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.

處理器是否有任何作用或僅取決於編譯器?

+1

鏘給人尺寸6. –

+0

@JohnZwinck:請附上鍊接,如果你測試它譁。 – Destructor

+1

我在我的Macbook 64-bit Clang 3.5上測試了它。 –

回答