web-dev-qa-db-fra.com

Quelle est la différence entre la mémoire réservée et la mémoire engagée?

Je comprends que la mémoire doit être réservée avant d'être engagée. Et lorsqu'il est réservé, aucun autre processus ne peut l'utiliser. Cependant, la mémoire réservée ne compte pas dans la RAM disponible. Mais n'est-ce pas? Parce que si personne d'autre ne peut l'utiliser, à quoi sert-il d'être "disponible"?

Ou y a-t-il une plus grande différence?

48
glutz78

Dans le contexte de Win32, "réservé" signifie que l'espace d'adressage est alloué dans le processus qui l'a demandé. Cela peut être utilisé, par exemple, pour réserver de l'espace pour un grand tampon qui n'est pas tout de suite nécessaire, mais lorsque cela est nécessaire, il doit être contigu.

La réservation de mémoire n'interagit pas du tout avec les autres processus, car chaque processus a son propre espace d'adressage privé. Ainsi, l'affirmation selon laquelle "lorsqu'il est réservé, aucun autre processus ne peut l'utiliser" n'a aucun sens, car les processus ne peuvent normalement pas allouer de mémoire dans l'espace d'adressage d'un autre processus.

Lorsque les pages réservées doivent être validées (stockage de stockage alloué pour elles), cette opération peut potentiellement échouer en raison d'un manque de mémoire physique (ou de fichier d'échange).

48
Greg Hewgill

J'aime voir Reserved comme réservant l'espace adresse afin que personne d'autre ne puisse l'allouer (mais je ne peux pas utiliser la mémoire à cette adresse car elle n'est pas encore disponible). Et Committed as mappage qui adresse l'espace au mémoire physique afin qu'il puisse être utilisé.

Pourquoi voudrais-je réserver ? Pourquoi ne pas simplement vous consacrer à la mémoire? Il y a plusieurs raisons que j'ai en tête:

  1. Certaines applications ont besoin d'une plage d'adresses spécifique, disons de 0x400000 à 0x600000, mais n'ont pas besoin de mémoire pour stocker quoi que ce soit. Il est utilisé pour intercepter l'accès à la mémoire. Par exemple, si un code accède à cette zone, il sera capturé. (Utile pour une raison quelconque.)

  2. Certains threads doivent stocker des données en expansion progressive. Et les données doivent être dans un seul bloc de mémoire contigu. Il est préférable de ne pas engager une grande mémoire physique en une seule fois car elle n'est pas nécessaire et serait un tel gaspillage. La mémoire peut être utilisée par certains autres threads en premier. La mémoire physique n'est engagée qu'à la demande.

13
kaosad

Processus de mémoire virtuelle (espace d'adressage) et réel RAM sont tous deux différents. Vous pouvez avoir 512 Mo physiques RAM mais votre processus peut toujours adresser 4 Go d'espace d'adressage virtuel (2 Go) Espace utilisateur) Chaque adresse d'un processus peut être considérée comme gratuite, réservée ou validée à tout moment.

Un processus commence avec toutes les adresses libres, ce qui signifie qu'elles sont libres d'être enregistrées dans la mémoire ou réservées pour une utilisation future.Avant qu'une adresse libre puisse être utilisée, elle doit d'abord être allouée comme réservée [~ # ~] ou [~ # ~] validé. Mais n'a pas besoin d'être réservé pour qu'il soit engagé.

réserver de la mémoire signifie réserver un espace d'adressage virtaul à des fins futures. il n'est pas associé à Physical RAM (mappé à RAM Adresses). Là où la mémoire engagée signifie qu'il sera associé à RAM afin que vous puissiez y stocker des données.

http://msdn.Microsoft.com/en-us/library/ms810627.aspx

5
user1982084