c++ - -mmacosx-version-min 影响位域的打包行为?

标签 c++ macos clang

我看到一个奇怪的行为,我的位域在填充中结束:

 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/

相关文章:

javascript - .app 文件夹是什么?如何将其转换为 .dmg 存档?

c++ - Clang Tools Extras 中有什么?

c++ - 如何执行一个简单的查询使用 sqlapi++ 与 oracle

c++ - C++ 中的二叉搜索树

cocoa - 如何直接从磁盘读取文件?

objective-c - NSString 到 NSBezierPath 某些标准字体的奇怪字形

objective-c - 有什么方法可以让 xcode 中的静态分析器忽略整个目录?

ios - Xcode 警告 : Not such file or directory (. pcm 文件)

c++ - 使用内存映射传递分配的内存

c++ - 在 AngelScript 中使用全局函数