Vad är en Stack Overflow?

September 17

Stack overflow är ett programmeringsfel i vilken ett försök att skriva data till en viss minnesblock misslyckas eftersom det inte finns något utrymme kvar i blocket. Denna typ av fel inträffar på samma sätt som buffertspill, heap svämmar och stack buffertspill. Skillnaden mellan dessa typer av fel beror på datordatastruktur som används, och gemensamt drag är att ett försök inträffar att skriva mer data än det finns utrymme för att hålla den.

Symtom på en stackspill kan variera beroende på datorspråk som används och felrapportering maskiner tillgängliga. I C ++, manifesterar en stack overflow ofta sig själv som en segmente fel, och ofta finns det ingen ytterligare information ges för att avgöra var eller hur överflödet hände. En spill i Java resulterar ofta i en virtuell maskin krasch som ger ut en rimligt detaljerad fel fil. Oavsett vilket språk som ett spill inträffar, kan överflödet nästan alltid korrigeras genom korrekt felsökning och identifiering av den ursprungliga översvämningen källan.

Datorspråk som erbjuder explicit minneshantering är ofta lättare att skydda mot spill. Allmänt accepterade praxis programmering dikterar vanligtvis att för varje segment av minnet ett program allokerar bör programmet även ta bort sig själv. C ++ medger denna mekanism, och noggrann kontroll på detta sätt kan hålla mängden minne ett program använder till ett minimum. Språk som inte erbjuder explicit minneshantering, och istället använder implicit minneshantering, är svårare att skärma av stackoverflow fel. Java sköter sitt eget minne inuti sin virtuella maskin, så att data inte kan explicit raderas vilja att göra plats för fler.

Ett vanligt misstag av nybörjare programmerare är att anta att en stack overflow inte kan hända i datorspråk som hanterar sin egen minneshantering. Även om detta verkar troligt i början, är det faktiskt inte fallet. Språk med implicit minneshantering har ofta sophämtare som befriar onödiga block av minne, men dessa sophämtare fungerar inte alltid på den tiden en programmerare förväntar. Att förlita sig på sophämtare är relativt farlig, och det kan inte alltid skydda ett program från ett spill fel.

Overflow fel kan vara omvälvande och stoppa ett helt program, eller så kan de vara nästan tyst och tillåta att ett program för att fortsätta framåt. Dessa andra typer av fel är ofta det svåraste att hitta eftersom ett fel kan uppstå som kom från ett bräddavlopp många rader kod innan. En stack overflow inte ofta kräver att söka igenom ett helt program, men ju längre ett program kan köras efter ett spill får svårare felet vara att hitta och åtgärda.

  • I C ++, manifesterar en stack overflow ofta sig själv som en segmente fel, och ofta finns det ingen ytterligare information ges för att avgöra var eller hur överflödet hände.