La réponse courte à cette question est que aucune de ces valeurs n'est un indicateur fiable de la quantité de mémoire qu'un exécutable utilise réellement, et aucune d'entre elles n'est vraiment appropriée pour déboguer une fuite de mémoire.
Octets privés font référence à la quantité de mémoire dont dispose l'exécutable du processus demandé - pas nécessairement le montant qu'il représente utilisant réellement . Ils sont "privés" car ils excluent (généralement) les fichiers mappés en mémoire (c'est-à-dire les DLL partagées). Mais - voici le problème - ils n'excluent pas nécessairement la mémoire. alloué par ces fichiers . Il n'y a aucun moyen de savoir si un changement dans les octets privés est dû à l'exécutable lui-même, ou à une bibliothèque liée. Les octets privés sont également no exclusivement de la mémoire physique ; ils peuvent être paginés sur le disque ou dans la liste des pages en attente (c'est-à-dire qu'ils ne sont plus utilisés, mais pas encore paginés non plus).
Ensemble de travail se réfère au total physique la mémoire vive (RAM) utilisée par le processus. Cependant, contrairement aux octets privés, cette valeur inclut également les fichiers mappés en mémoire et diverses autres ressources, ce qui en fait une mesure encore moins précise que les octets privés. Il s'agit de la même valeur que celle indiquée dans le "Mem Usage" du Gestionnaire des tâches et qui a été la source d'une confusion sans fin ces dernières années. La mémoire dans l'ensemble de travail est "physique" dans le sens où elle peut être adressée sans défaut de page ; cependant, la liste des pages en attente est la suivante également toujours physiquement dans la mémoire mais ne sont pas signalés dans le Working Set, et c'est pourquoi vous pouvez voir l'utilisation de la mémoire chuter soudainement lorsque vous minimisez une application.
Octets virtuels sont le total espace d'adressage virtuel occupé par l'ensemble du processus. Il s'agit d'un ensemble similaire à l'ensemble de travail, dans le sens où il inclut les fichiers mappés en mémoire (DLL partagées), mais aussi les données de la liste d'attente et les données qui ont déjà été paginées et se trouvent dans un fichier de pagination sur le disque. Le total des octets virtuels utilisés par chaque processus d'un système soumis à une forte charge représentera une quantité de mémoire nettement supérieure à celle dont dispose réellement la machine.
Donc les relations sont :
- Les octets privés correspondent à ce que votre application a réellement alloué, mais incluent l'utilisation des fichiers de pages ;
- L'ensemble de travail est constitué des octets privés non paginés et des fichiers mappés en mémoire ;
- Les octets virtuels sont l'ensemble de travail plus les octets privés paginés et la liste de réserve.
Il y a un autre problème ici ; tout comme les bibliothèques partagées peuvent allouer de la mémoire à l'intérieur de votre module d'application, ce qui peut entraîner de faux positifs signalés dans les octets privés de votre application, su peut également finir par allouer de la mémoire à l'intérieur de l'application partagé modules, ce qui conduit à de faux négatifs . Cela signifie qu'il est possible que votre application ait une fuite de mémoire qui ne se manifeste jamais dans les octets privés. Peu probable, mais possible.
Les octets privés sont un moyen raisonnable approximation de la quantité de mémoire que votre exécutable utilise et peut être utilisé pour aider à réduire une liste de candidats potentiels pour une fuite de mémoire ; si vous voyez que le nombre augmente sans cesse et sans fin, vous voudriez vérifier ce processus pour une fuite. Cela ne peut cependant pas être le cas, prouver qu'il y a ou non une fuite.
L'un des outils les plus efficaces pour détecter/corriger les fuites de mémoire dans Windows est en fait Visual Studio (le lien renvoie à la page sur l'utilisation de VS pour les fuites de mémoire, pas à la page du produit). Rational Purify est une autre possibilité. Microsoft propose également un programme plus général document sur les meilleures pratiques sur ce sujet. D'autres outils sont répertoriés dans cette question précédente .
J'espère que cela clarifie certaines choses ! La recherche de fuites de mémoire est l'une des choses les plus difficiles à faire en matière de débogage. Bonne chance.