GCC测试版本4.8.5
, 分别测试使用cc -O2 -g test.c
, cc -O3 -g test.c
以及 ARRAY_SIZE
分别define
为17
和18
.
Crash? |
-O2 |
-O3 |
17 |
NO |
NO |
18 |
NO |
YES |
可以看到, 当启用O3
优化, 且ARRAY_SIZE
大于等于18
时,程序会crash.
对比汇编代码可以看到
主要区别是使用汇编指令进行了优化movdqa
, 文档中写道该指令需要16字节对齐the operand must be aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.
参考文档:A bug story: data alignment on x86
本文链接, 未经许可,禁止转载