Windows平台GCC 6.3.0中__attribute__((packed))失效问题求助
Windows平台GCC 6.3.0下__attribute__((packed))失效的解决办法
先确认结构体的
__attribute__((packed))位置是否正确,必须放在结构体定义的大括号之后、分号之前,正确写法示例:#include <stdint.h> typedef struct { uint16_t limit; uint32_t base; } __attribute__((packed)) gdt_register_t;位置错误会直接导致属性不生效。
Windows下的MinGW/GCC默认会兼容MSVC的结构体布局规则,这会干扰
__attribute__((packed))的效果。编译时添加-mno-ms-bitfields参数,强制GCC使用GNU原生的结构体打包规则:gcc -c abc.c -mno-ms-bitfields也可以尝试使用
-fpack-struct=1参数,强制所有结构体按1字节对齐,达到和packed属性一致的效果:gcc -c abc.c -fpack-struct=1验证结构体大小时,确保代码没有重复定义结构体、引入冲突头文件的情况,直接用
sizeof(gdt_register_t)输出结果做测试。
内容的提问来源于stack exchange,提问作者hfie A
相关产品推荐
相关产品推荐

