-mmacosx版本min会影响比特字段的打包行为吗



我看到一种奇怪的行为,我的位字段最终被填充:

struct Test {
unsigned short a : 1;
unsigned short b : 15;
};

当在clang中使用-mmacosx-version-min=10.11(或更高版本(编译时(测试了4.0.1和Apple的10.0.0(,我进入了https://github.com/arvidn/struct_layout:

struct ::Test [2 Bytes]
--- 2 Bytes padding ---

对于-mmacosx-version-min=10.10(或更低(,我得到:

struct ::Test [2 Bytes]
0: [unsigned short : 2] a                             -- {cache-line 0}
0: [unsigned short : 2] b

有人知道我违反了什么标准或规则吗?

谢谢!

您使用的struct_layout工具似乎依赖于DWARF调试信息。您看到的差异并不反映数据布局的差异,只反映可用的调试信息。

使用-mmacosx-version-min=10.10将DWARF的版本限制为第2版,因为macOS10.10的工具只能理解这一点。我希望通过指定-gdwarf-2可以得到类似的结果。

最新更新