我看到一种奇怪的行为,我的位字段最终被填充:
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
可以得到类似的结果。