Witam. Chciałbym mieć większą pewność że stos nie nadpisze mi danych. Czy deklarując zmienne jako globalne, i wszystkie zmienne w funkcjach jako static spowoduję że stos będzie mniej wykorzystywany? Oczywiście nie licząc funkcji bibliotecznych.
Pozdrawiam Paweł
Didn't find your answer? Ask the community — no account required.
B
Bogdan G
Stos bedzie mniej wykorzystywany - to prawda. Jednak bedzie mniej miejsca na niego. Przykład - w jednej procedurze potrzebujesz lokalnie zmienną dwubajtową. W drugiej również. Jeśli obie zrobisz static wówczas nie bedą zajmowały miejsca na stosie, ale razem zajmą 4 bajty miejsca, o które skróci sie miejsce na stos. Czyli w przypadku jeśli nie są one razem wywyoływane zwiekszasz prawdopodobieństwo nadpisania danych przez stos. Możesz ocywiście te dane umieścic w jednym miejscu pamieci - jednej zmiennej ale zmniejsza to czytelność programu. Lepiej jest jednak dawać, gdzie się da zmienne lokalne, a w trakcie testowania sprawdzić głębokość wnikania stosu w pamięć.
A
Adam Dybkowski
pawel pisze:
A nie lepiej obliczać szczytową zajętość stosu (np. wcześniej wypełnić cały obszar stosu stałą wartością a potem sprawdzać, gdzie najniżej się zaczyna) przez dłuższy czas i ew. dodatkowo sprawdzać na przykład co sekundę, czy nie przekroczono zadanej głębokośći?
P
Pawel
Ciekawy pomysł. W którym momencie najlepiej wypełnić ten stos. Może na początku funkcji main? Czy w którejś z sekcji init..? Pozdrawiam Paweł
A
Adam Dybkowski
Pawel pisze:
Najlepiej zanim w ogóle stos jest do czegoś użyty - czyli AFAIR w sekcji .init2
W main też oczywiście możesz tylko wtedy wypełnij jedynie obszar od początku stosu do SP.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.