Qu'est-ce qu'un tas de mémoire?
Réponses
Trop de publicités?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:
- La mémoire est -
free
'd - 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.
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.
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.
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.