Stack vs Heap: Kend forskellen

Indholdsfortegnelse:

Anonim

Hvad er en stak?

En stak er et specielt område i computerens hukommelse, der gemmer midlertidige variabler oprettet af en funktion. I stack erklæres, lagres og initialiseres variabler under kørselstid.

Det er en midlertidig lagerhukommelse. Når computeropgaven er afsluttet, slettes variablenes hukommelse automatisk. Stacksektionen indeholder for det meste metoder, lokale variabler og referencevariabler.

I denne vejledning lærer du,

  • Hvad er Stack?
  • Hvad er Heap?
  • Nøgleforskelle mellem stak og bunke
  • Fordele ved at bruge Stack
  • Fordele ved at bruge Heap
  • Ulemper ved at bruge Stack
  • Ulemper ved at bruge Heap
  • Hvornår skal jeg bruge bunken eller stakken?

Hvad er Heap?

Bunken er en hukommelse, der bruges af programmeringssprog til at gemme globale variabler. Som standard gemmes alle globale variabler i hukommelsesplads. Det understøtter dynamisk hukommelsestildeling.

Bunken administreres ikke automatisk for dig og administreres ikke så tæt af CPU'en. Det er mere som en fritflydende hukommelsesregion.

Nøgleforskel

  • Stack er en lineær datastruktur, mens Heap er en hierarkisk datastruktur.
  • Stack-hukommelse bliver aldrig fragmenteret, mens Heap-hukommelse kan blive fragmenteret, når hukommelsesblokke først allokeres og derefter frigøres.
  • Stack får kun adgang til lokale variabler, mens Heap giver dig adgang til variabler globalt.
  • Stakvariabler kan ikke ændres, mens Heap-variabler kan ændres.
  • Stack-hukommelse allokeres i en sammenhængende blok, mens Heap-hukommelse allokeres i en vilkårlig rækkefølge.
  • Stack kræver ikke at de-allokere variabler, mens det i Heap er nødvendigt at allokere.
  • Stackallokering og deallocation udføres ved hjælp af kompilatorinstruktioner, mens Heapallokering og deallocation udføres af programmøren.

Nøgleforskelle mellem stak og bunke

Parameter Stak Bunke
Type datastrukturer En stak er en lineær datastruktur. Heap er en hierarkisk datastruktur.
Adgangshastighed Højhastighedsadgang Langsommere sammenlignet med stak
Rumstyring Plads administreret effektivt af OS, så hukommelsen aldrig bliver fragmenteret. Heap Space bruges ikke så effektivt. Hukommelse kan blive fragmenteret, når hukommelsesblokke først tildeles og derefter frigøres.
Adgang Kun lokale variabler Det giver dig adgang til variabler globalt.
Begrænsning af pladsstørrelse Begrænsning af stakstørrelse afhængigt af operativsystem. Har ikke en specifik grænse for hukommelsesstørrelse.
Tilpas størrelse Variabler kan ikke ændres Variabler kan ændres.
Hukommelsesallokering Hukommelse allokeres i en sammenhængende blok. Hukommelse tildeles i en vilkårlig rækkefølge.
Tildeling og omfordeling Gøres automatisk ved hjælp af kompilatorinstruktioner. Det udføres manuelt af programmøren.
Deallocation Kræver ikke at allokere variabler. Eksplicit fratildeling er nødvendig.
Koste Mindre Mere
Implementering En stak kan implementeres på 3 måder, simpel array-baseret, ved hjælp af dynamisk hukommelse og Linked-listebaseret. Heap kan implementeres ved hjælp af array og træer.
Hovedemne Mangel på hukommelse Hukommelsesfragmentering
Referencens lokalitet Instruktioner til automatisk kompileringstid. Tilstrækkelig
Fleksibilitet Fast størrelse Ændring af størrelse er mulig
Adgangstid Hurtigere Langsommere

Fordele ved at bruge Stack

Her er fordelene / fordelene ved at bruge stack:

  • Hjælper dig med at administrere dataene i en LIFO-metode (Last In First Out), som ikke er mulig med sammenkædet liste og matrix.
  • Når en funktion kaldes, gemmes de lokale variabler i en stak, og den ødelægges automatisk, når den er returneret.
  • En stak bruges, når en variabel ikke bruges uden for denne funktion.
  • Det giver dig mulighed for at kontrollere, hvordan hukommelse allokeres og deallokeres.
  • Stak renser automatisk objektet op.
  • Ikke let ødelagt
  • Variabler kan ikke ændres.

Fordele ved at bruge Heap

Fordele / fordele ved at bruge bunkehukommelse er:

  • Heap hjælper dig med at finde det største og mindste antal
  • Affaldssamling kører på bunkehukommelsen for at frigøre den hukommelse, der bruges af objektet.
  • Heap-metode, der også bruges i Priority Queue.
  • Det giver dig adgang til variabler globalt.
  • Heap har ingen grænse for hukommelsesstørrelse.

Ulemper ved at bruge Stack

Ulemper / ulemper ved at bruge Stack-hukommelse er:

  • Stack hukommelse er meget begrænset.
  • Oprettelse af for mange objekter på stakken kan øge risikoen for stackoverløb.
  • Tilfældig adgang er ikke mulig.
  • Variabel lagring overskrives, hvilket undertiden fører til udefineret opførsel af funktionen eller programmet.
  • Stakken falder uden for hukommelsesområdet, hvilket kan føre til en unormal afslutning.

Ulemper ved at bruge Heap

Ulemper / ulemper ved at bruge Heaps-hukommelse er:

  • Det kan give den maksimale hukommelse, et operativsystem kan levere
  • Det tager mere tid at beregne.
  • Hukommelsesadministration er mere kompliceret i bunkehukommelse, da den bruges globalt.
  • Det tager for meget tid i udførelsen sammenlignet med stakken.

Hvornår skal jeg bruge bunken eller stakken?

Du skal bruge heap, når du har brug for at tildele en stor hukommelsesblok. For eksempel vil du oprette et stort størrelsesarray eller en stor struktur for at holde variablen i lang tid, så skal du allokere den på bunken.

Men hvis du arbejder med relativt små variabler, der kun kræves, indtil funktionen, der bruger dem, er i live. Derefter skal du bruge stakken, som er hurtigere og lettere.