私のコードでメモリ リークが発生しているようです。そのため、メモリ リークの原因となっているコード内の場所を突き止めようとしています。
投稿 で、ヒープ内の使用可能なメモリの正確な情報を取得できません システムコールを減らすために小さなメモリが要求されたときに、OS が大きなメモリを割り当てる可能性があると言われました。
Windowsで正しいですか?
私のコードでメモリ リークが発生しているようです。そのため、メモリ リークの原因となっているコード内の場所を突き止めようとしています。
投稿 で、ヒープ内の使用可能なメモリの正確な情報を取得できません システムコールを減らすために小さなメモリが要求されたときに、OS が大きなメモリを割り当てる可能性があると言われました。
Windowsで正しいですか?
ここで重要なのは、他の質問を見た後、メモリを割り当てたときに何が起こるかではありません。重要なのは、リリースしたときに何が起こるかです。特に、1 KBの割り当てがOSに解放されることはなく、小さすぎます。それは空きブロックのリストに追加され、(ほぼ)同じサイズの次の割り当てで使用できるようになります。
VirtualQuery()ではメモリリークを確実に検出することはできません。
Visual Studioを使用する場合は、組み込みのリーク検出機能を使用してください。他にもたくさんのツールがあります。
ほとんどのシステム (Windows の最新のコンパイラを含む) では、ヒープ マネージャーは OS から比較的大きなメモリの "チャンク" を割り当て、それを分割してプログラムで使用できるようにします。OS からのその割り当ては、通常、少なくとも数十キロバイトになります。
これらの大きなメモリ チャンクは、プログラムの実行が終了したときに OS に返されます。それよりも早く発生する可能性がありますが、実行の終了が最も一般的です。
これらの大きなチャンクはそれぞれ、OS によって単一の割り当てとして追跡されます (ただし、ヒープ マネージャーは、コードで使用するためにそれを小さな断片に分割します)。OS に解放されたものは、空きメモリ ブロックとして表示されます。