2011-05-05 58 views
1

在GCC編譯器中調用#pragma pack()時沒有參數的對齊方式是什麼?分類包裝和對齊

此外,我經常看到,當我們使用placement new創建對象時,class經常被打包。這是什麼原因?是否有必要這樣做?

回答

2

的第一部分,你可能會不顧一切地使用谷歌:http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

其次有可能是當你需要控制你的類的二進制格式。您可能需要管理的存儲器和所述量的數據結構的實際二進制偏移:

struct 
{ 
    char c; 
    int i; 
}; 

可使用8個字節的存儲器或5個字節的內存,根據機器類型和編譯包使用。

+0

對於第一部分,這是否意味着我可以從代碼中取出#pragma pack()? – leslieg 2011-05-05 04:16:39

+0

取決於代碼。如果代碼中沒有其他的雜注包,是 – 2011-05-05 04:21:19

+0

感謝您的回覆。假設我在一個.h文件中有多個類聲明,這是否意味着如果在特定類之前設置#pragma pack(1),#pragma pack(1)下面的所有類都會使用它?所以我需要將其設置回#pragma pack()?如何在其他.h文件中聲明類? – leslieg 2011-05-05 04:29:28