je voudrais connaître la différence exacte entre Commit Size (visible dans le Task Manager ) et Virtual Size (visible dans SysInternals Process Explorer ).
Le paramètre Taille virtuelle dans Process Explorer ressemble à un indicateur plus précis de Utilisation totale de la mémoire virtuelle par un processus. Cependant, la taille de validation est toujours plus petite que la taille virtuelle et je suppose il n'inclut pas toute la mémoire virtuelle utilisée par le processus. J'aimerais que quelqu'un explique ce qui est exactement inclus dans ces paramètres.
La mémoire peut être réservée, validée, d'abord accessible et faire partie de l'ensemble de travail. Lorsque la mémoire est réservée , une partie de l'espace d'adressage est mise de côté, rien d'autre ne se produit.
Lorsque la mémoire est engagée , le système d'exploitation garantit que les pages correspondantes pourraient existent en principe soit dans le RAM physique, soit dans le fichier d'échange. En d'autres termes, il compte dans sa limite stricte du nombre total de pages disponibles sur le système et crée formellement des pages. C'est-à-dire qu'il crée des pages et prétend qu'elles existent (alors qu'en réalité elles n'existent pas encore).
Lorsque la mémoire est accédée pour la première fois, les pages qui formellement existent sont créés afin qu'ils existent vraiment . Soit une page zéro est fournie au processus, soit les données sont lues dans une page à partir d'un mappage. La page est déplacée dans l'ensemble de travail du processus (mais n'y restera pas nécessairement pour toujours).
Chaque processus en cours d'exécution a un certain nombre de pages qui sont factuellement et logiquement en RAM, c'est-à-dire que ces pages existent, et elles existent "officiellement" aussi. Ceci est l'ensemble de travail du processus.
De plus, chaque processus en cours d'exécution a des pages qui sont en fait dans la RAM, mais qui n'existent pas officiellement dans RAM any plus. Ils peuvent être sur ce qu'on appelle la "liste de secours" ou une partie du cache de tampon, ou quelque chose de différent. Lorsque ceux-ci sont accessibles, le système d'exploitation peut simplement les déplacer à nouveau dans le jeu de travail.
Enfin, chaque processus a des pages qui ne sont pas du tout dans RAM (soit sur swap, soit elles n'existent pas encore).
Taille virtuelle comprend la taille de toutes les pages réservées par le processus .
Taille de validation ne comprend que les pages qui ont été validées .
Autrement dit, en termes simples, la "taille virtuelle" est à peu près votre problème, et n'est limitée que par la taille de votre espace d'adressage, tandis que la "taille de validation" est le problème de tout le monde car elle consomme une ressource globale limitée (RAM plus swap). Il affecte donc d'autres processus .
La taille de validation est la quantité d'espace réservé dans le fichier d'échange pour le processus. Utilisé lorsque ses pages doivent être échangées pour faire de la place dans RAM pour d'autres processus.
Et oui, la taille de la mémoire virtuelle sera plus grande car elle inclut les pages qui ne sont pas sauvegardées par le fichier d'échange. Au moins les sections de code et de ressources dans les EXE et les DLL non déplacées. Si nécessaire, ces pages peuvent simplement être supprimées et rechargées à partir du fichier. Toutes les DLL du système d'exploitation appartiennent à cette catégorie. De plus, tous les fichiers mappés en mémoire utilisés par le processus. L'utilitaire VMMap de SysInternals peut donner un aperçu.
La taille virtuelle est la taille de l'espace d'adressage virtuel du processus.
Lors de l'allocation de mémoire, vous pouvez demander une plage d'adresses sans réellement engager de mémoire derrière. Ces adresses ne pointent pas vers la mémoire physique jusqu'à ce qu'un deuxième appel d'allocation soit utilisé pour les valider.
En savoir plus sur VirtualAlloc . Linux a la fonction mmap qui fait la même chose.