c ++ - Hvor mange funktioner skal der oprettes en stackoverflow?

Indlæg af Hanne Mølgaard Plasc

Problem



På Windows XP ved hjælp af Visual C ++ med 2 GB RAM, hvor mange funktioner skulle være på stakken samtidig for at skabe en stackoverflow? (dvs. i rekursive funktioner)


Er der en enkel måde, jeg kunne beregne dette for andre lignende situationer?

Bedste reference


Der er ingen måde at kende lige fra kompilatoren. Stackoverflader sker på grund af overfyldning af stakken. Stabens størrelse vokser afhængigt af de argumenter, en funktion tager, lokale variabler, som funktionen bruger og kompilatoroptimeringer. Der er endda nogle C99 funktioner, jeg tror, ​​der vil tildele plads direkte fra stakken.


Grænsens størrelse for stakken bestemmes af en compiler switch, ikke hvor meget RAM du har i din computer. Så hvor mange opkald det kræver at overløb har mere at gøre med compiler-indstillinger end din hukommelse .


Det er ikke noget du kan bestemme a priori. I hvert fald ikke trivielt.

Andre referencer 1


Du kan prøve en uendelig rekursion. Det er en af ​​de almindelige årsager til en stack overløb.


int f() { g(); } int g() { f(); }