引用Valgrind教程:
优化的代码可能会导致valgrind错误地报告未初始化值错误。作者知道如何修复此问题,但这会使valgrind变得非常缓慢(而且它已经相当缓慢了)。建议的解决方法是在使用valgrind调试代码时不进行优化。无论如何,在调试时不进行优化是一个好的经验法则。
(来源: https://people.gnome.org/~newren/tutorials/developing-with-gnome/html/ch03s03.html)
什么类型的优化会导致这种情况,并且它们并不是真正的问题?
xor reg,reg
指令作为函数的第一条指令,其中reg
是一个调用者保存寄存器。这个汇编指令总是合法的。它可以是int x; x ^= x;
(非法的C代码)的未优化翻译。或者它可以是int x=0;
的优化翻译。 - Pascal Cuoqxor reg,reg
,认为它对应于int x; x ^ = x;
,但如果程序是使用优化编译的,则此指令实际上对应于安全的源级构造int x = 0;
。(重申一遍,我不认为这是一个真实的例子,但一个真实的例子可能看起来像这个。) - Pascal Cuoq