MVC 11.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

这是因为内存中的数据对齐。

问题是要将4个字节存储在4个字节块中,需要112个这样的块,占用448个字节(比预期的多2个字节)。而为了存储最后一个字,你还需要4个字节而不是2个(更多2个字节)。所以你有4个额外的字节。

你可以尝试评论“bootRecordSignature”,你仍然应该比预期的多得2个字节(预期的是510,但你会得到512)。