我在我的代碼中有一個struct iof_header
,我確定它的寬度是24個字節。我執行一個sizeof(iof_header),它返回32個字節寬。結構如何存儲在內存中?
問題1 爲什麼它是32字節寬而不是24?
問題2 包括它的成員,結構如何存儲在內存中?
問題3 我發現我創建字節我的結構之一[4-8 & 20-24]都爲NULL的任何時間,我看到這種明顯的在我的字符數組。該陣列的內容如下{4 bytes of BASEID_Code, 4 NULL bytes, 8 bytes of zeroed padding, 4 bytes of ASID_Code, 4 NULL bytes, 8 bytes of size}
我的unsigned __int32
成員末尾有空字節,爲什麼會發生這種情況?
這可能與編譯有關嗎?可能是使CPU能夠更快地處理這些數據類型的一項有效工作?
struct iof_header
{
union
{
struct
{
unsigned __int32 BASEID_Code;
unsigned __int64 padding;
union
{
char ASID_Type[4];
unsigned __int32 ASID_Code;
};
unsigned __int64 Size;
}header;
char header_c[24];
};
iof_header()
{
header.ASID_Code = 0;
header.BASEID_Code = 0;
header.Size = 0;
header.padding = 0;
}
};
某物和一個char [32]的'union'怎麼能有小於32字節的大小? –
去閱讀這個externation-http://en.wikipedia.org/wiki/Data_structure_alignment – OldProgrammer
這已被問及已答覆一百萬次。你所有的三個問題。如果有的話,你應該發佈_separately_。 –