0

私のコードでメモリ リークが発生しているようです。そのため、メモリ リークの原因となっているコード内の場所を突き止めようとしています。

投稿 で、ヒープ内の使用可能なメモリの正確な情報を取得できません システムコールを減らすために小さなメモリが要求されたときに、OS が大きなメモリを割り当てる可能性があると言われました。

Windowsで正しいですか?

4

2 に答える 2

4

ここで重要なのは、他の質問を見た後、メモリを割り当てたときに何が起こるかではありません。重要なのは、リリースしたときに何が起こるかです。特に、1 KBの割り当てがOSに解放されることはなく、小さすぎます。それは空きブロックのリストに追加され、(ほぼ)同じサイズの次の割り当てで使用できるようになります。

VirtualQuery()ではメモリリークを確実に検出することはできません。

Visual Studioを使用する場合は、組み込みのリーク検出機能を使用してください。他にもたくさんのツールがあります。

于 2012-05-22T05:22:56.480 に答える
0

ほとんどのシステム (Windows の最新のコンパイラを含む) では、ヒープ マネージャーは OS から比較的大きなメモリの "チャンク" を割り当て、それを分割してプログラムで使用できるようにします。OS からのその割り当ては、通常、少なくとも数十キロバイトになります。

これらの大きなメモリ チャンクは、プログラムの実行が終了したときに OS に返されます。それよりも早く発生する可能性がありますが、実行の終了が最も一般的です。

これらの大きなチャンクはそれぞれ、OS によって単一の割り当てとして追跡されます (ただし、ヒープ マネージャーは、コードで使用するためにそれを小さな断片に分割します)。OS に解放されたものは、空きメモリ ブロックとして表示されます。

于 2012-05-22T06:24:19.507 に答える