ホームページ >バックエンド開発 >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: を使用した単純なプログラムでメモリにまだ到達可能

この質問は、 を含む簡単なプログラムheader.

問題:

を含む簡単なプログラムヘッダーは、まだ到達可能なメモリに関する Valgrind 警告を生成します。標準ライブラリのオブジェクトがプログラム自体に割り当てられていないため、これは予想外です。

#include <iostream>

int main() {
  return 0;
}

答え:

Valgrind 警告はバグではなく、特徴。 C 標準ライブラリの多くの実装では、独自のメモリ プール アロケータが使用されます。破棄されたオブジェクトのメモリはすぐには解放されず、OS に戻されませんが、後で再利用できるようにプール内に保持されます。プログラムの終了時にメモリ プールも解放されないため、Valgrind はメモリがまだ到達可能であると報告します。

解決策:

プール キャッシュを無効にする方法はいくつかあります。そして、STL に malloc を強制的に使用させ、メモリを解放します。可能:

  • GCC 2.91 ~ 3.1 の場合:
g++ -D__USE_MALLOC ...
  • GCC 3.2.2 および以降:
export GLIBCPP_FORCE_NEW=1
  • GCC 3.4 以降:
export GLIBCXX_FORCE_NEW=1

追加メモ:

  • これこの解決策を使用すると、プログラムの速度が低下する可能性があります。
  • この動作はライブラリのバグではなく、パフォーマンスを向上させるための機能です。
  • などの他のヘッダー はメモリ プール アロケータを使用しないため、この問題は発生しません。

以上がValgrind が `` を使用した簡単なプログラムでまだ到達可能なメモリを報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。