我看到一个奇怪的行为,我的位域在填充中结束:
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 调试信息。您看到的差异并不反射(reflect)数据布局的差异,仅反射(reflect)可用调试信息的差异。
使用 -mmacosx-version-min=10.10
将使用的 DWARF 版本限制为版本 2,因为这是 macOS 10.10 的工具所能理解的全部内容。我希望您通过指定 -gdwarf-2
会得到类似的结果。
关于c++ - -mmacosx-version-min 影响位域的打包行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53290437/