首页 >后端开发 >C++ >为什么 Valgrind 报告使用 `` 的简单程序仍可访问内存?

为什么 Valgrind 报告使用 `` 的简单程序仍可访问内存?

Barbara Streisand
Barbara Streisand原创
2024-11-29 01:47:10318浏览

Why Does Valgrind Report Still Reachable Memory with a Trivial Program Using ``?

Valgrind: Memory stillreachable with trivial program using

这个问题是关于 Valgrind 中关于仍可访问内存的警告。包含 的简单程序

问题:

一个包含 的简单程序。标头会生成有关仍可访问内存的 Valgrind 警告。这是意外的,因为程序本身没有分配标准库中的对象。

#include <iostream>

int main() {
  return 0;
}<p><strong>答案:</strong></p>
<p>Valgrind 警告不是错误,而是一个错误特征。 C 标准库的许多实现都使用自己的内存池分配器。被破坏对象的内存不会立即释放并返回给操作系统,而是保留在池中以供以后重用。当程序退出时,内存池也没有被释放,导致 Valgrind 报告内存仍然可达。</p>
<p><strong>解决方案:</strong></p>
<p>有几种方法可以禁用池缓存并强制 STL 使用 malloc 并释放内存可能:</p>
<ul><li><strong>使用 GCC 2.91 至 3.1:</strong></li></ul>
<pre class="brush:php;toolbar:false">g++ -D__USE_MALLOC ...
  • 使用 GCC 3.2.2 和更高版本:
export GLIBCPP_FORCE_NEW=1
  • GCC 3.4 及更高版本:
export GLIBCXX_FORCE_NEW=1

其他注意:

  • 此解决方案可能会减慢程序速度。
  • 此行为不是库中的错误,而是提高性能的功能。
  • 其他标头,例如 不存在此问题,因为它们不使用内存池分配器。

以上是为什么 Valgrind 报告使用 `` 的简单程序仍可访问内存?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn