プロセスが起動された場合、構成するメモリは以下の通りとなります。
仮想メモリ領域は共有可能/共有不可能(プライベート データ)領域が存在します。
メモリの種類 | 説明 |
イメージ(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 などで構成されていることが分かりました。
スポンサード リンク