use*_*176 2 optimization valgrind
引用Valgrind教程:
优化的代码可能导致valgrind错误报告未初始化的值错误。作者知道如何解决此问题,但是它会使valgrind变慢得多(并且已经相当慢了)。建议的解决方案是在尝试使用valgrind调试代码时不进行优化。无论如何,调试时不进行优化是一个很好的经验法则。
(来源:https : //people.gnome.org/~newren/tutorials/developing-with-gnome/html/ch03s03.html)
哪种类型的优化会导致这种情况,它们又不是真正的问题吗?
哪种类型的优化会导致这种情况,它们又不是真正的问题吗?
一个特定的实例:glibc有strlen()那个
这是“安全的”,因为它永远不会导致崩溃(从4字节对齐的指针中读取4个字节永远不会越过页面边界),但是它可能会“超读”已分配块的末尾(例如字符串来自strdup("hello")-这里仅分配了6个字节,但strlen将读取8)。
现在,对于Valgrind而言,此特定实例不再是问题,因为它重定向strlen到其自己的副本。
但是在优化下,您自己的代码中可能会发生类似的循环展开,然后Valgrind将报告误报。