Comprendre la structure de la mémoire de processus Windows [fermé]


2

Je trouve de nombreux blogs et documents expliquant la structure de la mémoire de processus. Tous décrivent une structure de mémoire du type suivant:

Mais quand je regarde l’outil VMMap dans Windows, je trouve des pages de pile, tas etc.
Par exemple:
entrez la description de l'image ici

J'ai des questions suivantes:

  1. Quelqu'un peut-il expliquer pourquoi ces images ne sont pas cohérentes? Où vais-je mal?

  2. Lorsque j'utilise VirtualAllocEx(), dans VMMap, une région est marquée comme mémoire privée. S'agit-il d'un segment de segment de mémoire, de pile ou de pile?


1
Nominé pour réouverture. Pour moi, la question est tout à fait claire et quelle est la réponse.
Jamie Hanrahan

1
La première réponse est que le premier diagramme ne s'applique tout simplement pas à Windows. Pas même pour NT 3.1 sur x86. Cela ne s'applique pas non plus à VMS. Cela semble être une variante de quelque chose qui a probablement été dessiné concernant Unix dans les années 1970. Notez qu'il n'y a même pas d'allocation pour des choses comme le stockage local de threads ou les piles par threads! Ignorez-le, et amusez-vous à le copier.
Jamie Hanrahan

1
La deuxième réponse est "aucune de ces réponses". Lorsque vous utilisez VirtualAllocEx avec l'option _COMMIT, vous créez un nouvel espace d'adressage virtuel. Il ne sort pas de l'espace de mappage de tas, de pile ou de mémoire existant. Il n’existe pas non plus de région prédéfinie pour un mappage de mémoire, par exemple. Chaque nouvelle allocation est créée à partir d'un espace d'adressage virtuel non alloué et il n'y a aucune raison pour que tous les mappages de mémoire, tous les tas, etc., soient adjacents. Oh, et d'ailleurs, aucun de ceux-ci ne sont des "segments". L'ensemble du concept de "segment" est obsolète.
Jamie Hanrahan

1
Une région de 1 Mo (par défaut; cette option peut être remplacée) de vas est réservée à la pile de mode utilisateur de chaque thread. quelques pages à son extrémité haute adresse sont engagées , ce qui les rend accessibles. Si l'utilisation de la pile par le thread dépasse la taille validée, des pages supplémentaires sont validées selon les besoins. Si cela dépasse la taille réservée d'origine, la tentative échoue et une exception est déclenchée. Il existe également une pile beaucoup plus petite et non paginable dans l’espace noyau, utilisée lorsque le thread est en mode noyau. Détails: docs.microsoft.com/en-us/windows/desktop/procthread/…
Jamie Hanrahan

1
En ce qui concerne la gestion de la mémoire en général sous Windows, voir bien entendu Windows Internals de Solomon, Russinovich, et al . Une plongée très profonde sur le gestionnaire de mémoire est dans un livre intitulé What Makes It Page? , disponible sur Amazon.
Jamie Hanrahan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.