Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Čo je Stack Overflow

? Pretečeniu zásobníka je druh programovacieho chyby , ktorá nastane , keď sa program pokúsi prideliť viac pamäte na zásobníku volaní , než je k dispozícii . Je to potenciálne závažná chyba , ktorá spôsobí , že program , obťažovanie pád a je zvyčajne výsledkom jedného z dvoch konštrukčných chýb . Stack

stack odkazuje na časť pamäte, ktorá sa používa na ukladanie informácií o funkciách programu . Veľkosti a technické údaje o zásobníka bude líšiť v závislosti na programovací jazyk , prekladač , operačný systém a typ procesora , a tieto údaje sú obvykle skryté programátor vo väčšine jazykoch vyššej úrovne .
Príklad stack

Zoberme si nasledujúci príklad v pseudokódu :

funkciu { 1. volanie funkcie B.2 . volať C funkcie . }

funkcie b { 1. volanie funkcie C.2 . Vytlačiť Spot . }

Funkcia c { 1. Vytlačiť na príkaz Spustiť . }

Pretože každá funkcia môže volať ďalšie funkcie , zásobník existuje sledovať , kde sa v nadradenej funkcii pokračovať aj po funkčnej dieťa vráti . Tento príklad, ak prestal vnútri funkcie c , môže mať hromadu , ktorá vyzerá niečo ako toto :

> A1 --- > B1 -------- > C1

Vzhľadom k tomu , prvý riadok funkcie a volá funkciu B , a prvý riadok funkcie B volanie funkcie C. Po funkcie C bude ukončený , program bude pokračovať späť do reťaze , beží B2 a nakoniec A2 .

nekonečnú rekurziu

pretečeniu zásobníka nastane , keď sa program pokúsi uložiť príliš veľa informácií na zásobníku . Najčastejšou príčinou pretečeniu zásobníka je chyba konštrukcie tzv nekonečné rekurzia . Zoberme si nasledujúci príklad v pseudokódu :

funkcie { 1. volanie funkcie A. }

A výsledný zásobník :

- > A1 --- > A1 -------- > A1 ------- ------- > A1 ( a tak ďalej ) , celým

, ktorí majú skúsenosti s programovania sa uznať ako variácie na nekonečnej slučky , s výnimkou , skôr než bežať navždy , tento program bude nakoniec spotrebovať všetky pamäť na zásobníku , čo má za následok haváriu a chyby pretečeniu zásobníka .
prevencia

chyby pretečeniu zásobníka sa zvyčajne vyskytujú pri pokuse o implementácii rekurzívne algoritmy , a kľúč ako sa vyhnúť väčšine chýb je zabezpečiť , aby nasledujúce platí pre všetky rekurzívne implementácia : rekurzívne funkcie musí obsahovať návratový stav , ktorý nie je vytvoriť ďalšiu vrstvu rekurzia a rekurzívne funkcie musia byť navrhnuté tak , aby každá vrstva rekurzia Pridaná voda musí priniesť funkcie bližšie k stavu výstupu .
Veľké Miestne premenné

Ďalšie , oveľa vzácnejšie príčinou chýb pretečeniu zásobníka je vyhlásenie o veľkých lokálnych premenných , zvyčajne vo forme matíc , ktoré obsahujú stovky tisíc alebo milióny , prvkov . Najjednoduchší spôsob , ako zabrániť pretečeniu zásobníka v tejto situácii je použitie ukazovateľov a dynamickú alokáciu pamäte , aby sa zabránilo vyhlásení dáta na zásobníku , ak sú také pamäťovo náročné operácie vyžadujú .

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené