也许我对“打包”属性的性质有误解,但我的理解是下面的结构应该打包到 16 个字节,而不是通常填充的 24 个字节。我可以验证是否正在应用打包属性(通常),因为我在同一个头文件中定义了另一个结构,该结构从 16 字节压缩到 10 字节。编译器是否有任何理由忽略该属性而不通过警告指示?
为了澄清,当我说它似乎没有打包时,我是基于 sizeof(foo) 的输出,它返回 24 而不是预期的 16。有问题的代码在一个简单/粗略的自定义内核中目前工具非常有限,所以我一直依靠通过打印到屏幕进行基本调试。
我正在使用 GCC 10.3.0(在 ubuntu 上)。
typedef struct {
uint16_t m1;
uint16_t m2;
uint8_t m3;
uint8_t m4;
uint16_t m5;
uint32_t m6;
uint32_t m7;
}__attribute__((packed)) foo;