Stack vs Heap: connaître la différence

Table des matières:

Anonim

Qu'est-ce qu'une pile?

Une pile est une zone spéciale de la mémoire de l'ordinateur qui stocke les variables temporaires créées par une fonction. Dans la pile, les variables sont déclarées, stockées et initialisées pendant l'exécution.

C'est une mémoire de stockage temporaire. Lorsque la tâche de calcul est terminée, la mémoire de la variable sera automatiquement effacée. La section stack contient principalement des méthodes, des variables locales et des variables de référence.

Dans ce tutoriel, vous apprendrez,

  • Qu'est-ce que Stack?
  • Qu'est-ce que Heap?
  • Différences clés entre Stack et Heap
  • Avantages de l'utilisation de Stack
  • Avantages de l'utilisation de Heap
  • Inconvénients de l'utilisation de Stack
  • Inconvénients de l'utilisation de Heap
  • Quand utiliser le tas ou la pile?

Qu'est-ce que Heap?

Le tas est une mémoire utilisée par les langages de programmation pour stocker des variables globales. Par défaut, toutes les variables globales sont stockées dans l'espace mémoire du tas. Il prend en charge l'allocation de mémoire dynamique.

Le tas n'est pas géré automatiquement pour vous et n'est pas aussi étroitement géré par le processeur. Cela ressemble plus à une région de mémoire flottante.

DIFFÉRENCE CLÉ

  • Stack est une structure de données linéaire tandis que Heap est une structure de données hiérarchique.
  • La mémoire de la pile ne sera jamais fragmentée alors que la mémoire du tas peut devenir fragmentée lorsque des blocs de mémoire sont d'abord alloués puis libérés.
  • Stack accède aux variables locales uniquement tandis que Heap vous permet d'accéder aux variables globalement.
  • Les variables de pile ne peuvent pas être redimensionnées tandis que les variables de tas peuvent être redimensionnées.
  • La mémoire de pile est allouée dans un bloc contigu tandis que la mémoire de tas est allouée dans n'importe quel ordre aléatoire.
  • Stack n'a pas besoin de désallouer des variables alors que dans Heap, la désallocation est nécessaire.
  • L'allocation et la désallocation de pile sont effectuées par les instructions du compilateur tandis que l'allocation et la désallocation de tas sont effectuées par le programmeur.

Différences clés entre Stack et Heap

Paramètre Empiler Tas
Type de structures de données Une pile est une structure de données linéaire. Heap est une structure de données hiérarchique.
Vitesse d'accès Accès haut débit Plus lent que la pile
Gestion de l'espace L'espace est géré efficacement par le système d'exploitation afin que la mémoire ne soit jamais fragmentée. L'espace de tas n'est pas utilisé aussi efficacement. La mémoire peut devenir fragmentée en tant que blocs de mémoire d'abord alloués puis libérés.
Accéder Variables locales uniquement Il vous permet d'accéder aux variables globalement.
Limite de la taille de l'espace Limite de la taille de la pile en fonction du système d'exploitation. N'a pas de limite spécifique sur la taille de la mémoire.
Redimensionner Les variables ne peuvent pas être redimensionnées Les variables peuvent être redimensionnées.
Allocation de mémoire La mémoire est allouée dans un bloc contigu. La mémoire est allouée dans n'importe quel ordre aléatoire.
Allocation et désallocation Fait automatiquement par les instructions du compilateur. Cela est fait manuellement par le programmeur.
Désallocation Ne nécessite pas de désallouer des variables. Une désaffectation explicite est nécessaire.
Coût Moins Suite
Mise en œuvre Une pile peut être implémentée de 3 façons, basée sur un tableau simple, en utilisant la mémoire dynamique et basée sur une liste liée. Le tas peut être implémenté en utilisant un tableau et des arbres.
Problème principal Manque de mémoire Fragmentation de la mémoire
Localité de référence Instructions de compilation automatique. Adéquat
Souplesse Taille fixe Le redimensionnement est possible
Temps d'accès Plus rapide Ralentissez

Avantages de l'utilisation de Stack

Voici les avantages / avantages de l'utilisation de stack:

  • Vous aide à gérer les données dans une méthode Last In First Out (LIFO) qui n'est pas possible avec la liste et le tableau liés
  • Lorsqu'une fonction est appelée, les variables locales sont stockées dans une pile, et elles sont automatiquement détruites une fois renvoyées.
  • Une pile est utilisée lorsqu'une variable n'est pas utilisée en dehors de cette fonction.
  • Il vous permet de contrôler la façon dont la mémoire est allouée et désallouée.
  • Stack nettoie automatiquement l'objet.
  • Pas facilement corrompu
  • Les variables ne peuvent pas être redimensionnées.

Avantages de l'utilisation de Heap

Les avantages / avantages de l'utilisation de la mémoire de tas sont:

  • Heap vous aide à trouver le nombre maximal et minimal
  • Le garbage collection s'exécute sur la mémoire du tas pour libérer la mémoire utilisée par l'objet.
  • Méthode de tas également utilisée dans la file d'attente prioritaire.
  • Il vous permet d'accéder aux variables globalement.
  • Heap n'a aucune limite sur la taille de la mémoire.

Inconvénients de l'utilisation de Stack

Les inconvénients / inconvénients de l'utilisation de la mémoire Stack sont:

  • La mémoire de la pile est très limitée.
  • La création d'un trop grand nombre d'objets sur la pile peut augmenter le risque de débordement de pile.
  • L'accès aléatoire n'est pas possible.
  • Le stockage des variables sera écrasé, ce qui conduit parfois à un comportement indéfini de la fonction ou du programme.
  • La pile tombera en dehors de la zone de mémoire, ce qui pourrait entraîner une interruption anormale.

Inconvénients de l'utilisation de Heap

Les inconvénients / inconvénients de l'utilisation de la mémoire Heaps sont:

  • Il peut fournir la mémoire maximale qu'un système d'exploitation peut fournir
  • Le calcul prend plus de temps.
  • La gestion de la mémoire est plus compliquée dans la mémoire de tas car elle est utilisée globalement.
  • L'exécution prend trop de temps par rapport à la pile.

Quand utiliser le tas ou la pile?

Vous devez utiliser le tas lorsque vous avez besoin d'allouer un gros bloc de mémoire. Par exemple, vous souhaitez créer un tableau de grande taille ou une grande structure pour conserver cette variable pendant longtemps, vous devez l'allouer sur le tas.

Cependant, si vous travaillez avec des variables relativement petites qui ne sont nécessaires que jusqu'à ce que la fonction qui les utilise soit active. Ensuite, vous devez utiliser la pile, ce qui est plus rapide et plus facile.