不对齐警告修复它们或不修复它们?

时间:2017-03-10 12:14:42

标签: c++ memory-alignment type-punning

在我的自定义.zip解压缩程序中,我收到类似警告:

runtime error: load of misaligned address 0x7f280ffe875a for type 'const uint32_t', which requires 4 byte alignment

原因是reinterpret_castuint32_t*并且取消引用它。我知道memcpy uint32_t可以解决问题,但我应该打扰吗?我看到许多广泛使用的库(如pixman,cairo ......)都有同样的警告。

1 个答案:

答案 0 :(得分:5)

始终修复它们。编译器的矢量化程序可能使用对齐信息,并假定您不调用未定义的行为。这可能会导致崩溃。

有关gcc devs和LZ4作者之间关于此问题的讨论,请参阅:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65709