SysInternals の VMMap を使用して、WinXP 上の Win32 C++ プロセスによって割り当てられたメモリを調べています。割り当てられたメモリの一部が予約されているがコミットされていない割り当てが多数見られます。私が読んでテストした限りでは、C++ プログラムで使用される一般的なメモリ アロケータ (malloc、new、LocalAlloc、GlobalAlloc など) はすべて、常に完全にコミットされたメモリ ブロックを割り当てます。ヒープは、メモリを予約するが、必要になるまでコミットしないコードの一般的な例です。これらのブロックの一部は Windows/CRT ヒープであると思われますが、これらの種類のブロックは、ヒープに予想されるよりも多いようです。私のプロセスでは、サイズが 64k から 8MB のこれらのブロックが 30 個程度あります。私のコードは、VirtualAlloc を意図的に呼び出して、予約されたコミットされていないメモリを割り当てることはありません。
VMMap の例をいくつか示します: http://www.flickr.com/photos/95123032@N00/5280550393/
その多くが予約されているがコミットされていないメモリのブロックを割り当てるには、他に何がありますか? プロセスに 30 個のヒープがあることは理にかなっていますか? ありがとう。