2013-03-25 92 views
0

我發現這樣奇怪的事情:爲MasterBootRecord結構MVC 11.0 - 錯誤的結構尺寸?

// 

typedef unsigned char Byte; 
typedef unsigned short int Word; 
typedef unsigned int Dword; 

// 
typedef struct 
{ 
    Byte currentPartitionState; 

    Byte startPartitionHead; 
    Word startCylinderSector; 

    Byte partitionType; 

    Byte endPartitionHead; 
    Word endCylinderSector; 

    Dword numSectorsBetweenMbrAndPartition; 
    Dword numSectorsInPartition; 
} PartitionEntry; 

// 
typedef struct 
{ 
    Byte executableCode[446]; 

    PartitionEntry partitionEntry1; 
    PartitionEntry partitionEntry2; 
    PartitionEntry partitionEntry3; 
    PartitionEntry partitionEntry4; 

    Word bootRecordSignature; 
} MasterBootRecord; 

當我嘗試獲得的sizeof(MasterBootRecord),我得到516個字節,但大小合適的是446 + 4×16 + 2 = 512爲什麼它可能是如此?

+1

您可能需要使用#pragma pack – drescherjm 2013-03-25 21:40:21

+1

'/正確的大小/ *我認爲應該是因爲我受教育程度不足以回答我自己的問題/' – 2013-03-25 21:50:54

+0

或重新安排數據成員。首先分區條目,然後是bootRecordSignature,然後是executableCode。 – 2013-03-25 21:50:55

回答

1

這是因爲內存中的數據對齊。

問題是要將4個字節存儲在4個字節塊中,需要112個這樣的塊,佔用448個字節(比預期的多2個字節)。而爲了存儲最後一個字,你還需要4個字節而不是2個(更多2個字節)。所以你有4個額外的字節。

你可以嘗試評論「bootRecordSignature」,你仍然應該比預期的多得2個字節(預期的是510,但你會得到512)。