我发现了一些奇怪的事情:对于MasterBootRecord结构
//
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.为什么会这样?
答案 0 :(得分:1)
这是因为内存中的数据对齐。
问题是,要以4字节块存储446个字节,需要112个这样的块,占用448个字节(比预期多2个字节)。并且为了存储最后一个Word,您还需要4个字节而不是2个字节(多2个字节)。所以你有4个额外的字节。
你可以尝试评论“bootRecordSignature”,你仍然可以获得比预期多2个字节(预期为510但你会得到512)。