【问题标题】:How to trace back #pragma pack?如何追溯#pragma pack?
【发布时间】:2015-01-30 06:49:40
【问题描述】:

我一直在努力解决 iOS 中的一个问题,该问题导致分配不正确,从 malloc 返回的内存比我应该为 CPP 对象获得的内存少。我最近发现这是由于两个翻译单元包含相同的标题,其中一个在其包含链中出现了几次#pragma pack

现在,我不确定如何正确追溯使用它的任何文件并确保它修复它。我添加了一堆 #pragma pack(show) 并从顶部确定了有问题的文件(有问题的文件是导致其他文件具有相同的包设置 1 的文件)。我已经在 Xcode 中打开了该文件并对其运行了预处理。

在大多数情况下,看起来代码正在将 pack 设置回默认值(arm64 上的 8)。是否有任何工具可以帮助验证链条上的违规者?

我拥有的唯一提示(包 1 的情况,即包设置的内容)是来自 iOS SDK 的标头。但即使它看起来还可以。

# 54 "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/include/sys/kauth.h" 2 3 4


#pragma pack(1)
typedef struct {
 u_int8_t sid_kind;
 u_int8_t sid_authcount;
 u_int8_t sid_authority[6];

 u_int32_t sid_authorities[16];
} ntsid_t;
#pragma pack()

【问题讨论】:

    标签: ios preprocessor memory-alignment


    【解决方案1】:

    正如我所提到的,在搜索预处理的源文件时,我找不到任何#pragma pack 的实例,该实例没有在不久之后撤消其设置。但是,我不知道还有另一种设置包装的方法,通过#pragma options align=(packed|reset)。事实证明它并没有被撤消,但我正在寻找#pragma pack

    【讨论】:

      猜你喜欢
      • 2013-09-29
      • 2017-01-14
      • 2016-01-15
      • 1970-01-01
      • 2014-05-10
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      相关资源
      最近更新 更多