【发布时间】: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