【发布时间】:2013-11-22 11:44:54
【问题描述】:
对于以下结构,结构的实际(无填充)大小为 54。在具有 MinGW (GCC) 4.8.1 x86_64 的 64 位 (Windows 7) 机器上,我得到sizeof(BMPHeader) 为56,这是可以理解的。根据 BMP 文件格式的要求,该结构不应有填充。我有三个选项(优先排序):
- C++11 的
alignas(1) struct __attribute__ ((packed)) BMPHeader#pragma pack(1)
但是,仅最后一个选项(优先级最低)似乎可以给我 54。这是编译器中的错误还是我在这里完全弄错了什么? SSCCE
#include <iostream>
struct alignas(1) BMPHeader
{
// BMP header
uint16_t magic;
uint32_t fileSize;
uint32_t reserved;
uint32_t dataOffset;
// DIB header
uint32_t dibHeaderLength;
uint32_t width;
uint32_t height;
uint16_t numColourPlanes;
uint16_t bitsPerPixels;
uint32_t biBitFields;
uint32_t dataSize;
uint32_t physicalWidth;
uint32_t physicalHeight;
uint32_t numPaletteColours;
uint32_t numImportantColours;
};
int main()
{
std::cout << sizeof(BMPHeader) << std::endl;
}
【问题讨论】:
-
alignas(1)不起作用。有了这个,你不能请求比自然对齐更严格的对齐。
标签: c++11 struct g++ mingw memory-alignment