Article View: pl.comp.lang.c
Article #547Re: rekurencja a pamiec ?
From: Karpierz
Date: Mon, 05 Jan 1998 16:52
Date: Mon, 05 Jan 1998 16:52
65 lines
2737 bytes
2737 bytes
Michał Suski <suseu@polbox.com> napisal
> Piszę właśnie program korzystający z rekurencji, ale niestety po 125
> zagłębieniach wszystko pada, najprawdopodobniej z braku pamięci.
> Najprawdopodobniej, bo komputer się wiesza, a raczej emm286 stwierdza
jakiś
> błąd i go zawiesza. Jak sprawdzać ilość dostępnej pamięci, dodam, że
> coreleft() nie pomaga, bo stwierdza, że jest jej cała masa. Z góry
> dziękuję.
Jesli piszesz w Borlandzie (a tak sadze po wykorzystaniu funkcji coreleft
()) to:
1: jako model pamieci wez przynajmniej small a najlepiej large (moze byc
huge).
2: bezposrednio przed funkcja main () ustaw duzy rozmiar stosu np:
unsignet int _stklen = 64000;
3: wlacz w opcjach kompilatora (przynajmniej dla prob) opcje
'check stack overflow'. Wtedy gdy przekroczysz rozmiar stosu otrzymasz
komunikat 'Stack overflow'.
4: ogranicz maksymalnie ilosc parametrow funkcji rekurencyjnej,
szczegolnie struktury przekazuj przez pointer (a dgy piszesz w c++
to przez referencje) a nie przez wartosc.
5: zmienne lokalne ktore nie wplywaja na nastepne wywolanie rekurecji
zrob statycznymi.
Jesli i to nie pomoze to jestes skazany na sztuczki
ktore uczynia program brzydkim ale...:
6: zlikwiduj zmienne lokalne np. tak.
zamiast
int funkcja rekurencyjna ()
{
int a;
double b;
...
}
zastosuj
int funkcja rekurencyjna ()
{
struct loc
{
int a;
double b;
} * ploc = (struct loc *) malloc (sizeof (struct loc)); // dla C++
new loc;
...
free (ploc); // dla C++ delete ploc;
}
7: do parametrow funkcji rekurencyjnej tez mozesz zastosowac podobny
sposob jak do zmiennych lokalnych z dynamicznym przydzielaniem i
zwalnianiem (poprzez malloc i free) odpowiedniej struktury z
parametrami
a do funkcji przekazuj tylko pointer (lub referencje) do tej struktury.
A gdy stwierdzisz ze dalej nic z tego, sprobuj zrobic to nierekurencyjnie
ale iteracyjnie. Wbrew pozorom nie zawsze to psuje "wyglad" algorytmu :).
Pozdrawiam
A.K.
karpierz@intertele.pl
Technical Details
Message-ID:
<01bd19fa$94ae2100$91baccc2@karpierz.dyn.ml.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.onet.pl!not-for-mailReferences:
<01bd189a$8c52aaa0$LocalHost@suseu>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.onet.pl!not-for-mail From: "Karpierz" <karpierz@inter.intertele.pl> Newsgroups: pl.comp.lang.c Subject: Re: rekurencja a pamiec ? Date: 5 Jan 1998 16:52:38 GMT Organization: poorly-installed news reader Lines: 65 Message-ID: <01bd19fa$94ae2100$91baccc2@karpierz.dyn.ml.org> References: <01bd189a$8c52aaa0$LocalHost@suseu> NNTP-Posting-Host: ppp145.intertele.pl X-Newsreader: Microsoft Internet News 4.70.1161 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit