プログラム内でメモリが割り当てられている場所を調べる最も良い方法は、デバッガを使用することです。ロードされたすべてのDLLと実行可能ファイル自体には割り当てがあり、それらのすべてが仮想メモリを断片化します。さらに、C/C++ライブラリとWindows APIを使用すると、アプリケーションにヒープが作成されます。これにより、少なくとも仮想メモリのチャンクが確保されます。
たとえば、VirtualAllocを使用して、比較的小さなプログラムで仮想メモリの大きなチャンクを予約することができます.VirtualAllocが失敗した場合、または新しいDLL(など)をロードしようとすると、また、ロードするDLLとその場所を常に制御することはできません。多くのA/Vやその他の製品は、起動時に実行中のすべてのプロセスにDLLを注入します。これが起きると、これらのDLLはしばしば最初にロードアドレスで選択されます。つまり、デフォルトでコンパイル/リンクされている可能性が高くなります。典型的な32ビットWindowsアプリケーションの利用可能な2GBの仮想アドレス空間の中で、DLLがそのアドレス空間の途中でスタックを読み込むと、取得できる最大の単一の割り当て/予約は1GB未満になります。
windbgを使用すると、メモリのどの領域が消費され、予約されているかなどがわかります。lmコマンドは、すべてのDLLのロードアドレスとEXEとその範囲を表示します。 !vadumpコマンドは、プロセスとページ保護によって使用されるすべての仮想メモリを表示します。ページの保護はそこにあるものへの大きなヒントです。たとえば、64ビットのcalc.exeプロセスの次の(部分的な)!vadumpでは、最初の領域が単にアクセスから保護された仮想メモリの範囲であることがわかります。 (とりわけ、これにより、アドレス0にメモリが割り当てられなくなります。)MEM_COMMITは、メモリがRAMまたはページングファイルによってバックアップされることを意味します。 PAGE_READWRITEは、おそらくヒープ・メモリー、またはロードされたモジュールのデータ・セグメントです。 PAGE_READEXECUTEは通常、ロードされ、lmによって生成されたリストに現れるコードです。 MEM_RESERVEは、私はそれが物事を説明するのに役立ちます願って何かが
0:004> !vadump
BaseAddress: 0000000000000000
RegionSize: 0000000000010000
State: 00010000 MEM_FREE
Protect: 00000001 PAGE_NOACCESS
BaseAddress: 0000000000010000
RegionSize: 0000000000010000
State: 00001000 MEM_COMMIT
Protect: 00000004 PAGE_READWRITE
Type: 00040000 MEM_MAPPED
BaseAddress: 0000000000020000
RegionSize: 0000000000003000
State: 00001000 MEM_COMMIT
Protect: 00000002 PAGE_READONLY
Type: 00040000 MEM_MAPPED
のメモリ領域を確保するVirtualAllocのと呼ばれるが、それは仮想メモリマネージャによってマップされていないこと、など...たことを意味します。 Windbgは素晴らしいツールであり、メモリの使用場所を見つけるのに役立つ多くの拡張機能を備えています。
本当にヒープを気にするなら、ヒープを見てください。
Microsoft Security Essentialsは、元の質問にリンクされている「プロファイラ」アプリケーションにWin32.Bisar!rtsトロイの木馬が含まれていると考えています。 –