MVC 11.0 -错误的结构大小
MVC 11.0 - Wrong structure size?
我发现了这样奇怪的事情:对于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)。
相关文章:
- C++ 结构错误"调用'erase'没有匹配函数
- 尝试传递结构数组,但出现"无法将'结构'转换为'结构*'错误
- 结构错误:"no matching function for call to "
- UE4 数据表结构错误
- STL 对priority_queue<int、结构>错误
- C :用于体系结构错误的经典未定义符号
- 体系结构错误的未定义符号
- 奇怪的用户定义的比较结构错误,用于C++中的priority_queue
- 模板结构错误
- C++结构错误 - 错误 C2061:语法错误:标识符
- C++ 结构错误的前向声明
- 结构错误"uninitialized reference member"
- 使用 MPL::fold 与占位符和我自己的结构错误
- C++结构错误"No matching function for call..."
- 插入映射<字符串,结构>错误
- CPP 头文件结构错误
- 矢量和结构错误
- C++ 结构 - 错误 1 错误 C2143:语法错误:缺少'*'之前的';'
- 结构错误的构造函数(调用类的构造函数 denconstructor,用于填充结构)
- 结构错误与C++