Windowsの32ビットプロセスでメモリ不足の問題が発生したため、パフォーマンスモニターを使用してそのプロセスの特定のカウンターをログに記録し始めました。
仮想バイトがプライベートバイトとワーキングセットの両方よりも高いのは正常ですが、私の場合、仮想バイトはプライベートバイトとワーキングセットの両方よりもはるかに高いことがわかりました。
どの特定の操作とWin32/CRT関数(CまたはC ++)は、仮想バイトを増やしますが、プライベートバイトとワーキングセットは増やしませんか?
パフォーマンスモニターのさまざまなカウンターの説明を理解していれば、それはある種の共有リソースになると思います。
異なるリリースのWindowsのメモリカウンター、および同じリリースのWindowsの異なるアプリケーションで使用する命名規則には、(控えめに言っても)多少の混乱があるように思われるので、次のようにまとめました。
MSDNからの情報
MSDN-Windowsリリースのメモリ制限によると、32ビットプロセスごとの32ビットWindowsのユーザーモード仮想アドレス空間の制限は通常2GBです。IMAGE_FILE_LARGE_ADDRESS_AWAREおよびを使用して最大3GBにすることができます4GT。
以下は、 MSDN-メモリパフォーマンス情報によると、パフォーマンスモニターのさまざまなカウンターと、タスクマネージャーの対応する列および情報を保持するWin32構造の説明です。
仮想バイト
Virtual Bytesは、プロセスが使用している仮想アドレス空間の現在のサイズ(バイト単位)です。仮想アドレス空間の使用は、必ずしもディスクまたはメインメモリページの対応する使用を意味するわけではありません。仮想空間は有限であり、プロセスはライブラリをロードする能力を制限する可能性があります。
タスクマネージャーXP:N / A
タスクマネージャーVista:N / A
構造:MEMORYSTATUSEX.ullTotalVirtual-MEMORYSTATUSEX.ullAvailVirtual
プライベートバイト
Private Bytesは、他のプロセスと共有できない、このプロセスが割り当てたメモリの現在のサイズ(バイト単位)です。
タスクマネージャーXP:VMサイズ
タスクマネージャーVista:コミットサイズ
構造:PROCESS_MEMORY_COUNTERS_EX.PrivateUsage
ワーキングセット
ワーキングセットは、このプロセスのワーキングセットの現在のサイズ(バイト単位)です。ワーキングセットは、プロセス内のスレッドが最近アクセスしたメモリページのセットです。コンピューターの空きメモリがしきい値を超えている場合、ページは使用されていなくてもプロセスのワーキングセットに残ります。空きメモリがしきい値を下回ると、ページはワーキングセットから削除されます。それらが必要な場合は、メインメモリを離れる前にワーキングセットにソフトフォールトされます。
タスクマネージャーXP:Memの使用法
タスクマネージャーVista:ワーキングセット
の構造:PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize