0

我发现了这么奇怪的东西:对于 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。为什么会这样???

4

1 回答 1

1

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

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

您可以尝试评论“bootRecordSignature”,您仍然应该比预期多获得 2 个字节(预期为 510,但您将获得 512)。

于 2013-03-25T21:53:21.803 回答