目标c-使LLVM/Clang为16位对齐



我正在处理一个遗留项目,该项目有大量可以追溯到OS X之前的文件。它的数据已经16位对齐了超过15年。我想转到完整的LLVM编译,但我似乎无法实现2字节对齐。有编译器级别的选项吗?(以前使用-恶意mac68k)

我知道这里有#pragma pack(2)选项。然而,这将需要我修改1000多个源文件来包含这一点。这是一个最坏的选择,但它似乎是一个黑客。此外,如果这是可能的,那么肯定有一个默认选项来设置对齐?

根据clang的消息来源,它确实支持mac68k对齐规则。现在看来,您只能通过"#pragma options align=mac68k"启用它。如果你可以接受小的clang黑客攻击,那么你也可以实现cmdline选项,并将补丁提交给clang。

我建议查看#pragma pack(请参阅http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx和http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html)。它相对容易使用,应该可以与苹果公司提供的任何编译器配合使用。

我在osx上使用ibm人员编译的最新gcc/gortran,如果你阅读了gcc手册,至少有8种不同的对齐优化需要考虑,而不仅仅是批量恶意

由于系统级标头采用默认对齐方式(在大多数情况下,它们没有覆盖对齐的指令),因此更改所有内容的对齐方式将中断操作系统调用。因此,你不想这样做。

只需编写一个脚本,将#pragma pack(2)应用于有问题的源文件,避免#include s。这相对容易,也不太可能造成不幸的副作用。

最新更新