242 votes

Qu'est-ce qu'un tas de mémoire?

Qu'est-ce qu'un tas de mémoire?

308voto

LeopardSkinPillBoxHat Points 11851

Sans doute vous dire tas à partir d'une clé de répartition point de vue, non pas à partir d'une structure de données de point de vue (le terme a plusieurs sens).

Une explication très simple, c'est que le tas est la partie de la mémoire allouée dynamiquement de la mémoire de résidence (c'est à dire la mémoire allouée par malloc). La mémoire allouée dans le tas restera alloué jusqu'à ce que l'un des cas suivants:

  1. La mémoire est - free'd
  2. Le programme se termine

Si toutes les références à la mémoire allouée sont perdus (par exemple, vous n'avez pas stocker un pointeur de plus), vous avez ce qu'on appelle une fuite de mémoire. C'est là que la mémoire a toujours été alloué, mais vous n'avez pas de moyen facile d'accéder aux plus. Une fuite de mémoire ne peut pas être récupéré pour les futures allocations de mémoire, mais lorsque le programme se termine le mémoire sera libre avais par le système d'exploitation.

Cela contraste avec la pile de la mémoire qui est l'endroit où les variables locales (celles qui sont définies à l'intérieur d'une méthode) vivre. La mémoire allouée sur la pile, en général, seulement des vies jusqu'à ce que la fonction retourne (il y a quelques exceptions, par exemple, les variables locales statiques).

Vous pouvez trouver plus d'informations sur le tas dans cet article.

26voto

mjv Points 38081

Un mémoire de tas est un emplacement de mémoire où la mémoire peut être attribué à accès aléatoire.
Contrairement à la pile où la mémoire est allouée et publié dans un très défini l'ordre, les éléments de données individuels alloués sur le tas sont généralement libérés d'une manière qui est asynchrone l'un de l'autre. Un tel élément de données est libéré lorsque le programme libère expressément le correspondant pointeur, et cela peut entraîner la fragmentation du tas. Dans l'opposition que les données en haut (ou en bas, selon la façon dont la pile fonctionne) peuvent être libérés, résultant dans l'élément de données d'être libéré dans l'ordre inverse, ils ont été attribués.

8voto

Justicle Points 6439

Un segment de mémoire est une structure commune permettant de contenir de la mémoire allouée dynamiquement. Voir http://en.wikipedia.org/wiki/Dynamic_memory_allocation

Il existe d'autres structures, telles que des piscines, des cheminées et des pieux.

8voto

C'est une partie de la mémoire allouée à partir du système d'exploitation par le gestionnaire de mémoire utilisé par un processus. Les appels à malloc() et autres utilisent ensuite la mémoire de ce tas au lieu de devoir traiter directement avec le système d'exploitation.

8voto

Uri Points 50687

Tu veux sans doute dire un segment de mémoire, pas de segment de mémoire.

Un segment de mémoire est essentiellement un gros pool de mémoire (généralement par un processus) à partir de laquelle le programme en cours d'exécution peut demander morceaux. Ceci est généralement appelé l'allocation dynamique.

Elle est différente de la Pile, où automatique "variables" sont attribués. Ainsi, par exemple, lorsque vous définissez une fonction C un pointeur de variable, assez d'espace pour contenir une adresse mémoire est allouée sur la pile. Cependant, vous aurez souvent besoin d'allouer dynamiquement de l'espace (Avec malloc) sur le tas et ensuite donner l'adresse où cette mémoire morceau commence à le pointeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X