pawel
Guest
Fri Sep 05, 2008 7:18 pm
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ł
Bogdan G
Guest
Fri Sep 05, 2008 8:39 pm
Quote:
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.
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ęć.
Adam Dybkowski
Guest
Fri Sep 05, 2008 11:46 pm
pawel pisze:
Quote:
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.
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?
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Pawel
Guest
Sat Sep 06, 2008 5:08 am
Quote:
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?
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ł
Adam Dybkowski
Guest
Sat Sep 06, 2008 7:01 pm
Pawel pisze:
Quote:
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?
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..?
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.