Jaki rozmiar ma stos?
BTW. Czy zdarzylo sie Wam kiedys napisac taki program, zeby przepelnic stos? i jak temu zaradzic?
Jaki rozmiar ma stos?
BTW. Czy zdarzylo sie Wam kiedys napisac taki program, zeby przepelnic stos? i jak temu zaradzic?
Stos ma taki rozmiar, jaki mu przydzielisz. Np.:
[code]Stosik Segment Stack
db 64 DUP (?)
Stosik EndS[/code]
W tym przypadku ma on 64 bajty.
A przepełnić stos? Żaden problem. Jeśli np. przydzieliłeś stosowi 4 bajty i wykonasz taki kod:
[code]push ax
push 30h
call Funkcja
[/code]
To w tym momencie przepełnisz stos, ponieważ odkładasz na niego 4 bajty i wywołujesz funkcję instrukcją call, która odkłada na stos adres powrotu (w tym przypadku już on się nie zmieści).
Oczywiście w prostych programach pod DOSa przepełnienie stosu może być nie odczuwalne, ale może również wykrzaczyć nasz prog. Wyniku nie możesz przewidzieć, dlatego należy unikać takich sytuacji.
[<font color="blue">dopisane</span>]
AndRew mnie wyprzedził.
[wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd]
Ale ja lakonicznie pisze [wstyd] [wstyd] [wstyd]
Otoz chodzi o to, ze ten program jest w Delphi a dalem to do tego dzialu z prefixem Asembler, bo wiedzialem, ze odpowiedz na moje pytanie sprowadzi sie do asemblera.
Kurcze, sorx za taką gafe.
Bycmoze nawet dalem to do zlego dzialu:(
Otoz mam program napisany w Delphi oczywiscie i wyskakuje mi tabliczka o przepelnieniu stosu. I jak temu zaradzic?
BTW. Bardzo prosze mnie nie bluzgac za to, ze dalem to do zlego dzialu i za moje roztargnienie, taki juz jestem:(
<font size="7">Dopisane</span></sup>
To czy dotyczy Delphi czy Assemblera to nie ma większego znaczenia. Odpowiedź jest taka sama: unikać sytuacji na jakie wskazali poprzednicy. Sprawdź warunki opuszczania funkcji rekurencyjnych. To najczęstsza przyczyna. Delphi zwykle rezerwuje wystarczająco dużo pamięci na stos. Jednak jeżeli sprawdziłeś wszystko dokładnie i program jest poprawny w każdym calu, tylko przeprowadza tak skomplikowane obliczenia to masz do wyboru:
Ja zalecam ten pierwszy sposób.