如何追溯#pragma pack?

时间:2015-01-26 23:46:59

标签: ios preprocessor memory-alignment

我一直在努力解决iOS中的一个问题导致分配不当,从malloc获得的内存少于CPP对象的内存。我最近发现它是由于两个翻译单元包括相同的标题,其中一个沿着其包含链发生了一些#pragma pack

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

在大多数情况下,看起来代码将包设置回默认值(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()

1 个答案:

答案 0 :(得分:0)

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