有没有办法让Clang,GCC或Visual Studio在内存访问未对齐时发出运行时警告,最好还为它发出源代码位置?
我需要在我的巨大遗留源(我自己不写)中找到包含未对齐访问的所有点,然后明确地将它们包装在过滤器中,这使它们对齐。
我需要这个来将源代码移植到将在未对齐访问时中断的平台。
答案 0 :(得分:1)
另一种方法是通过设置EFLAGS
寄存器的第18位(对齐检查)来引发异常。如果您正在使用x86 [-64]开发,并且代码覆盖率足够,这可能是一个有用的运行时机制来跟踪未对齐的R / W.
使用gcc / clang:
__asm__ ("pushf\n\t"
"orl $ 0x40000, (%esp)\n\t"
"popf\n\t");
答案 1 :(得分:0)
GCC有the -Wcast-align option。但是,它会引发编译时警告,而不是运行时警告,因为编译器不能引发运行时警告或错误。
如果您需要更多信息,我建议您阅读this SO question,其中谈到了未对齐的内存。
编辑:添加了关于GCC提高编译时而不是运行时警告的部分。