对未对齐的内存访问发出警告?

时间:2014-05-08 11:51:15

标签: c++ visual-c++ gcc g++ clang

有没有办法让Clang,GCC或Visual Studio在内存访问未对齐时发出运行时警告,最好还为它发出源代码位置?

我需要在我的巨大遗留源(我自己不写)中找到包含未对齐访问的所有点,然后明确地将它们包装在过滤器中,这使它们对齐。

我需要这个来将源代码移植到将在未对齐访问时中断的平台。

2 个答案:

答案 0 :(得分:1)

另一种方法是通过设置EFLAGS寄存器的第18位(对齐检查)来引发异常。如果您正在使用x86 [-64]开发,并且代码覆盖率足够,这可能是一个有用的运行时机制来跟踪未对齐的R / W.

使用gcc / clang:

__asm__ ("pushf\n\t"
         "orl $ 0x40000, (%esp)\n\t"
         "popf\n\t");

相关问题herehere。编译时检查也可能有用,但对动态地址无效。

答案 1 :(得分:0)

GCC有the -Wcast-align option。但是,它会引发编译时警告,而不是运行时警告,因为编译器不能引发运行时警告或错误。

如果您需要更多信息,我建议您阅读this SO question,其中谈到了未对齐的内存。

编辑:添加了关于GCC提高编译时而不是运行时警告的部分。