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为什么它可能是如此?
答
这是因为内存中的数据对齐。
问题是要将4个字节存储在4个字节块中,需要112个这样的块,占用448个字节(比预期的多2个字节)。而为了存储最后一个字,你还需要4个字节而不是2个(更多2个字节)。所以你有4个额外的字节。
你可以尝试评论“bootRecordSignature”,你仍然应该比预期的多得2个字节(预期的是510,但你会得到512)。
您可能需要使用#pragma pack – drescherjm 2013-03-25 21:40:21
'/正确的大小/ *我认为应该是因为我受教育程度不足以回答我自己的问题/' – 2013-03-25 21:50:54
或重新安排数据成员。首先分区条目,然后是bootRecordSignature,然后是executableCode。 – 2013-03-25 21:50:55