gpt4 book ai didi

optimization - 优化如何使 valgrind 误报?

转载 作者:行者123 更新时间:2023-12-03 17:13:01 27 4
gpt4 key购买 nike

引用 Valgrind 教程:

Optimized code can cause valgrind to wrongly report uninitialized value errors. The authors know how to fix this, but it would make valgrind much slower (and it is already quite slow). The suggested fix for this is to not optimize when trying to debug code with valgrind. Not optimizing when debugging is a good rule of thumb anyway.

(来源:https://people.gnome.org/~newren/tutorials/developing-with-gnome/html/ch03s03.html)

什么类型的优化会导致这种情况,它们为什么不是真正的问题?

最佳答案

What type of optimizations would cause this, and how are they not real problems?

一个具体的例子:glibc 有 strlen()

  • 确定指针是 4 字节对齐的,并且
  • 一次读取 4 个字节,然后使用位变换技巧来确定这 4 个字节中是否有任何一个为 0。

这是“安全的”,因为它永远不会导致崩溃(从 4 字节对齐的指针读取 4 字节永远不会越过页面边界),但它可能会“过度读取”已分配 block 的末尾(例如,如果字符串来自 strdup("hello")——这里只分配了 6 个字节,而 strlen 将读取 8 个字节)。

现在,这个特定实例对 Valgrind 来说不是问题,因为它将 strlen 重定向到它自己的副本。

但类似的循环展开可能会发生在您自己的优化代码中,然后 Valgrind 会报告误报。

关于optimization - 优化如何使 valgrind 误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com