2010-04-09 4 views
4

Nous savons que l'opération malloc() et new allouent de la mémoire dynamiquement, mais où réside heap? Chaque processus possède-t-il son propre segment privé dans l'espace de noms pour l'allocation dynamique ou le système d'exploitation a-t-il un système global partagé par tous les processus. De plus, je lis d'un manuel qu'une fois que la fuite de mémoire se produit, la mémoire manquante ne peut pas être réutilisée jusqu'au prochain redémarrage de notre ordinateur. Est-ce que cette thèse est juste? Si la réponse est oui, comment pouvons-nous l'expliquer?Où réside la mémoire allouée dynamiquement?

Merci pour votre réponse.

Cordialement.

+0

Quel manuel était-ce que vous avez lu cette chose à propos des fuites de mémoire? –

+0

@Neil J'ai emprunté à la bibliothèque, je ne me souviens pas du nom exact, désolé à ce sujet. –

Répondre

8

La mémoire est allouée à partir de l'espace d'adresse de l'utilisateur de votre mémoire virtuelle de processus. Et toute la mémoire est récupérée par le système d'exploitation lorsque le processus se termine, il n'est pas nécessaire de redémarrer l'ordinateur.

+0

+1. Notez que la mémoire n'est utilisable par personne d'autre si le processus est en cours d'exécution. Si la fuite augmente, vous serez bientôt hors de la mémoire. – Jack

0

Vous ne mentionnez pas l'OS de votre intérêt. Cela signifie exactement pas de réponse directe. Essayez de regarder dans un livre sur les systèmes d'exploitation Essayez par exemple de consulter un livre sur les systèmes d'exploitation . Tannerbaum

+0

@gineer Je pense que vous voulez dire que la mise en œuvre dépend de la plateforme. Qu'en est-il de l'implémentation de Linux - je ne m'intéresse pas tellement à Windows :-). Et quelle partie du manuel d'OS je devrais se rapporter? Gestion de la mémoire? Merci. –

1

Généralement, le moteur d'exécution C utilisera les différentes API OS pour allouer de la mémoire qui fait partie de son espace d'adressage de processus. Le, dans cette mémoire allouée, il va créer un tas et allouer la mémoire elle-même à partir de ce tas via des appels à malloc ou nouveau. La raison en est que souvent les API du système d'exploitation ont une granularité et nécessitent d'allouer de la mémoire en gros morceaux (comme une taille de page) alors que votre application veut généralement allouer de petites quantités de mémoire à la fois.

Questions connexes