プロセスが起動された場合、構成するメモリは以下の通りとなります。
仮想メモリ領域は共有可能/共有不可能(プライベート データ)領域が存在します。
| メモリの種類 | 説明 |
| イメージ(Image) | プロセスのファイルイメージ。(exeやdll)。Memory Mapped Fileの一種。 |
| メモリ マップド ファイル(Memory Mapped) File | メモリ マップド ファイル |
| 共有可能(Shareable) | プロセス間通信などによりプロセス間で共有可能なメモリ。 |
| ヒープ(Heap) | 動的に確保が可能なメモリ。C言語の場合は malloc 関数で確保、C++やJavaではnew で確保する。 メモリの確保/開放はアプリケーション側で実施。 Heap Managerにより割り当てられる。 (*)DEP(Data Execution Prevention)機能によりHeapAllocで確保した領域からのプログラム実行は不可能。 |
| マネージ ヒープ(Managed Heap) | .NET garbage collector により割り当てられる領域。 |
| スタック(Stack) | OSが自動的に確保/開放を行う。 ローカル変数、静的変数、パラメータなど。 サイズに制限があり、制限を越えると「Stack Over Flow」エラーが発生する。 サイズは小さい。 |
| プライベート データ(Private Data) | プロセスの仮想メモリから割り当てる、共有不可能なメモリ領域。 主にアプリケーションデータとして使用。 VirtualAlloc で確保。 |
| カーネル(kernel) | プロセスに関連したカーネルの物理メモリ。 主な用途はプロセスページテーブル。 |
| 未使用(Unusable) | 未使用の領域。 |
以下は internet explorer を起動した場合の各メモリ消費量のサンプルです。
| メモリの種類 | サイズ(KB) |
| イメージ(Image) | 115,264 |
| メモリ マップド ファイル(Memory Mapped) File | 102,812 |
| 共有可能(Shareable) | 42,660 |
| ヒープ(Heap) | 110,624 |
| マネージ ヒープ(Managed Heap) | 0 |
| スタック(Stack) | 73,088 |
| プライベート データ(Private Data) | 100,828 |
| カーネル(kernel) | 1,240 |
| 未使用(Unusable) | 8,140 |
| 合計 | 554,620 |
イメージが約115Mと大きな割合を占めます。専用ツールで確認すると、shell32.dllが約14M、ieframe.dll が約13M などで構成されていることが分かりました。
スポンサード リンク