MVC 11.0 - 结构尺寸错误?

时间:2013-03-25 21:37:58

标签: c++ sizeof

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

1 个答案:

答案 0 :(得分:1)

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

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

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