web-dev-qa-db-fra.com

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

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

140
H4cKL0rD

Vous voulez probablement dire heap du point de vue de l'allocation de mémoire, pas du point de vue de la structure de données (le terme a plusieurs significations).

Une explication très simple est que le tas est la partie de la mémoire où alloué dynamiquement la mémoire réside (c.-à-d. Mémoire allouée via malloc). La mémoire allouée à partir du tas restera allouée jusqu'à ce que l'un des événements suivants se produise:

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

Si toutes les références à la mémoire allouée sont perdues (par exemple, vous ne stockez plus de pointeur sur celle-ci), vous obtenez ce que l'on appelle un fuite de mémoire. C'est ici que la mémoire a toujours été allouée, mais vous ne pouvez plus y accéder facilement. La mémoire perdue ne peut pas être récupérée pour les allocations de mémoire futures, mais lorsque le programme sera terminé, la mémoire sera libérée par le système d'exploitation.

Comparez cela avec pile mémoire où vivent les variables locales (celles définies dans une méthode). La mémoire allouée sur la pile ne dure généralement que jusqu'au retour de la fonction (il existe quelques exceptions, par exemple des variables locales statiques).

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

191
LeopardSkinPillBoxHat

Un tas de mémoire ) est un emplacement en mémoire où la mémoire peut être allouée à accès aléatoire.
Contrairement à la pile où la mémoire est allouée et libérée dans un ordre très défini, des éléments de données individuels alloués sur les tas sont généralement libérés de manière asynchrone les uns des autres. Un tel élément de données est libéré lorsque le programme libère explicitement le pointeur correspondant, ce qui peut entraîner un segment fragmenté. En opposition, seules les données situées en haut (ou en bas, en fonction du mode de fonctionnement de la pile) peuvent être libérées, ce qui entraîne la libération des éléments de données dans l'ordre inverse de leur affectation.

13
mjv

Un segment de mémoire est une structure commune permettant de contenir de la mémoire allouée dynamiquement. Voir Dynamic_memory_allocation sur wikipedia.

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

7
Justicle

Heap n'est qu'un domaine dans lequel la mémoire est allouée ou désallouée sans aucun ordre. Cela se produit lorsque l’on crée un objet avec l’opérateur new ou quelque chose de similaire. Ceci est opposé à la pile où la mémoire est désallouée sur la base du premier, dernier sorti.

6
fastcodejava

Vous voulez probablement dire mémoire, pas mémoire.

La mémoire de tas est essentiellement un grand pool de mémoire (généralement par processus) à partir duquel le programme en cours peut demander des fragments. Ceci est généralement appelé allocation dynamique .

C'est différent de la pile, où des "variables automatiques" sont allouées. Ainsi, par exemple, lorsque vous définissez une variable pointeur dans la fonction C, vous disposez d'un espace suffisant pour contenir une adresse mémoire. Cependant, vous aurez souvent besoin d'allouer dynamiquement de l'espace (With malloc) sur le tas, puis de fournir l'adresse où cette partie de la mémoire commence au pointeur.

6
Uri

C'est un bloc de mémoire alloué à 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.

5

Le segment de mémoire est le segment de la mémoire qui n'est pas défini sur une taille constante avant la compilation et qui peut être contrôlé de manière dynamique par le programmeur. Considérez le tas comme un "pool libre" de mémoire que vous pouvez utiliser lors de l'exécution de votre application. La taille du segment de mémoire pour une application est déterminée par les contraintes physiques de votre RAM (mémoire vive)) et sa taille est généralement beaucoup plus grande que celle de la pile.

Nous utilisons la mémoire du tas quand nous ne savons pas combien de place une structure de données occupera dans notre programme, quand nous aurons besoin d'allouer plus de mémoire que ce qui est disponible sur la pile ou quand nous devons créer des variables qui durent toute la durée de notre application.

0
Malith Ileperuma