Dator > skälen till stacken

  • skälen till stacken


  • Stack overflow är ett program fel som uppstår när för mycket minne allokeras på run-time anropsstacken av en ansökan . I operativsystemet , detta anropsstacken är bokstavligen en " stack minne " på vilka program variabler och samtal förfarande lagras för användning inom den nuvarande räckvidden för avrättning. De främsta orsakerna till stacken är oändlig rekursion och stack variabler som är för stora . En tredje orsak , men mindre sannolikt , kan inträffa på grund av förlust av stapeln pekaren i minnet .

    oändlig rekursion

    oändlig rekursion orsakar anropsstacken att rinna över i de flesta dator språk . När ett förfarande eller funktionsanrop annat förfarande eller funktion , tidigare uppgifter om anropsstacken bibehålls och informationen från den nya funktionen fördelas på toppen av stacken . När en funktion som kallar sig rekursivt utan en tydlig form av uppsägning , kommer ansökan tilldela mer minne på stacken kontinuerligt tills mer minne allokeras än finns på stacken , vilket resulterar i stack overflow .

    Mycket stor stack Variabler

    variabler som deklareras på stacken omfatta ingående variablerna i ett förfarande , returvärdet till förfarandet och eventuella variabler medlem som används för beräkningar . Detta kan resultera i stack overflow om den sammanlagda storleken av förfarandet samtalet och dess variabler är större än den tillgängliga stackminne .

    Stack Pointer Förlust

    Stack Pekaren förlust inträffar när minnet på stacken blir skadad . Detta kan ske genom att försöka få tillträde till funktioner eller data i minnet som tidigare godkändes , till exempel. Om detta händer , inträffar en unik form av rekursion , vilket resulterar i ansökan att försöka ta reda på grundläggande uppgifter av en viss bit data . Eftersom informationen tekniskt inte finns , blir uppträdande av ansökan odefinierad , och en ändlös ström av funktionsanrop bli möjlig . Denna begränsning sker huvudsakligen endast i låg-nivå , objektorienterade språk , t. ex. C + + .

    2 5 6 2 3


Previous:nothing Next:Hur konvertera tal till ord i JavaScript





Relaterade artiklar


  • Vilka plikter för programmerare ?
  • varför spelet testningen är viktig
  • en guide om sql nästlade frågor
  • hur man tar emot parametrar i Visual Basic
  • Hur konvertera timmar till sekunder i Java
  • hur man lär sig programmering hemma
  • hur man skriver ut ett dokument med Visual Basic 6.0
  • fråga sql tutorial
  • hur man kan ändra teckensnitt i system.windows.textbox
  • typer av Manet protokoll