MVC 11.0 -错误的结构大小

MVC 11.0 - Wrong structure size?

本文关键字:结构 错误 MVC      更新时间:2023-10-16

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

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

问题是,要将446字节存储在4byte块中,您需要112个这样的块,占用448字节(比预期多2字节)。对于存储最后一个单词,你也需要4个字节而不是2个(多2个字节)。这就是你额外的4个字节

你可以试着注释"bootRecordSignature",你仍然应该得到2个字节比预期(预期是510,但你会得到512)。