Commit Size(Task Managerで見える)とVirtual Size)の正確な違いを知りたい(SysInternals 'で表示Process Explorer)。
Process ExplorerのVirtual Sizeパラメーターは、より正確な指標のように見えますプロセスごとの仮想メモリの合計使用量。ただし、Commit Sizeは常にVirtual Sizeよりも小さいため、プロセスで使用中のすべての仮想メモリは含まれません。これらのパラメータに正確に含まれるものを誰かに説明してほしい。
メモリは、予約、コミット、最初のアクセス、およびワーキングセットの一部にすることができます。メモリがreservedである場合、アドレス空間の一部は確保され、他には何も起こりません。
メモリがcommittedの場合、オペレーティングシステムは対応するページcouldを保証します原則として、物理RAMまたはページファイルのいずれかに存在します。つまり、システムで使用可能なページの合計のハード制限にカウントされ、正式にページを作成します。つまり、ページを作成し、ページが存在するふりをします(実際にはまだ存在していません)。
初めてメモリにアクセスしたとき、formallyというページが存在するtrulyが存在するように作成されます。プロセスにゼロページが提供されるか、データがマッピングからページに読み込まれます。ページは、プロセスのワーキングセットに移動されます(ただし、必ずしも永久にそこにとどまるわけではありません)。
実行中のすべてのプロセスには、RAMに事実上および論理的にあるページがあります。つまり、これらのページが存在し、「公式」にも存在します。これがプロセスのワーキングセットです。
さらに、実行中のすべてのプロセスには、RAMに事実上のページがありますが、RAM anyには正式には存在しませんもっと。それらは、「スタンバイリスト」と呼ばれるもの、バッファキャッシュの一部、または別のものに存在する場合があります。これらにアクセスすると、OSはそれらを再びワーキングセットに移動するだけです。
最後に、すべてのプロセスには、RAMにまったくないページがあります(スワップ上にあるか、まだ存在していません)。
仮想サイズプロセスが持つすべてのページのサイズで構成されますreserved。
コミットサイズは、committedであるページのみで構成されます。
つまり、一般的な用語では、「仮想サイズ」はほとんどあなた自身の問題であり、アドレス空間のサイズによってのみ制限されますが、「コミットサイズ」はグローバルな限られたリソース(RAMとスワップ)を消費するため、全員の問題です。したがって、は他のプロセスに影響します。
コミットサイズは、プロセスのページングファイルで予約されているスペースの量です。他のプロセス用にRAMにスペースを空けるためにページをスワップアウトする必要がある場合に使用されます。
そして、はい、仮想メモリサイズは、ページングファイルによってバッキングされていないページを含むため、大きくなります。少なくともEXEおよび再配置されていないDLLのコードおよびリソースセクション。必要に応じて、それらのページを単純に破棄し、ファイルからリロードできます。すべてのオペレーティングシステムDLLがこのカテゴリに適合します。さらに、プロセスで使用されるメモリマップファイル。 SysInternalsのVMMapユーティリティは、洞察を与えることができます。
仮想サイズは、プロセスの仮想アドレス空間のサイズです。
メモリを割り当てるとき、実際にメモリをコミットせずにアドレス範囲を要求できます。これらのアドレスは、2回目の割り当て呼び出しを使用してコミットするまで物理メモリを指しません。
VirtualAlloc の詳細をご覧ください。 Linuxには、同じことを行うmmap関数があります。