Een stack overflow is een soort programmering fout die optreedt wanneer een programma probeert meer geheugen op de call stack dan beschikbaar is toe te wijzen . Het is een potentieel ernstige fout dat het gewraakte programma zorgt voor crash en is meestal het gevolg van een van de twee ontwerp fouten . De Stack stack verwijst naar een gedeelte van het geheugen dat wordt gebruikt om informatie over de functie van een programma op te slaan . De afmetingen en de technische details van de stapel zal variëren afhankelijk van programmeertaal , compiler , het besturingssysteem en het type processor , en deze gegevens worden meestal verborgen voor de programmeur in de meeste hoger niveau talen . Voorbeeld zijn Stapel Neem het volgende voorbeeld in pseudocode : functie een { 1 . bel functie b.2 . bel functie c . } functie b { 1 . bel functie c.2 . Print Spot . } Functie c { 1 . Print Run . } Omdat elke functie andere functies kunnen noemen , de stack bestaat om bij te houden van waar in de bovenliggende functie voort te zetten nadat een kind functie terugkeert houden . Dit voorbeeld , indien gestopt in de functie c , kan een stack die er ongeveer zo uitziet : > A1 --- > B1 -------- > C1 Sinds de eerste regel van de functie A oproepen functie B , en de eerste regel van de functie B noemt functie C. Na functie C zal eindigen , zal het programma terug verder in de keten , hardlopen B2 en tenslotte A2 . Infinite Recursion een stack overflow treedt op wanneer een programma probeert te veel informatie op te slaan op de stapel . De meest voorkomende oorzaak van een stack overflow is een ontwerpfout genaamd oneindige herhaling . Neem het volgende voorbeeld in pseudocode : functie A { 1 . Bel functie A. } En de resulterende stapel : - > A1 --- > A1 -------- > A1 ------- ------- > A1 (enzovoort ) op Twitter Degenen die bekend zijn met het programmeren van computers zal dit herkennen als een variatie op de oneindige lus , behalve , in plaats van altijd lopen , zal dit programma uiteindelijk consumeren het geheugen op de stack , wat resulteert in een crash en een stack overflow fout . Preventie stack overflow fouten doen zich meestal bij een poging om recursieve algoritmen te implementeren , en de sleutel de meeste fouten voorkomen is dat het volgende geldt voor alle recursieve implementaties: recursieve functie moet een uitgang voorwaarde dat een andere laag van recursie geen aanmaken bevat , en de recursieve functie moet worden ontworpen dat elke laag van recursie toegevoegd moeten brengen de functie dichter bij de uitgang staat. grote lokale variabelen Een andere , veel zeldzamere oorzaak van stack overflow fouten is de verklaring van de grote lokale variabelen , meestal in de vorm van arrays met honderdduizenden of miljoenen , van de elementen . De eenvoudigste manier om stack overflows in deze situatie te voorkomen is om pointers en dynamisch toewijzen van geheugen gebruiken om te voorkomen verklaren de gegevens op de stack wanneer dergelijke geheugen intensieve operaties nodig zijn.
|