PDA

Prikaži potpunu verziju : Stek na modernim kompajlerima.


tchalle
8.1.2014, 17:32
Možda je OT.
Koliko je stek "dubok" na modernim kompajlerima, kompjuterima i operativnim sistemima?
Računao sam da će program da pukne oko broja 128, međutim on gura preko milion i tu sam ja zaustavio program.
Ili kompajler (GCC) ne prevodi bukvalno ono što sam napisao?

#include <iostream>
#include<stdlib.h>

using namespace std;


void funkcija(int x)
{
++x;
cout << x << endl;
funkcija(x);
}

int main()
{
int y=0;
funkcija(y);
system("PAUSE");
return 0;
}

Neutrino
8.1.2014, 18:17
Klasičan primer tail rekurzije koja ostavlja kompajleru da sam izabere kakav će pristup da izabere prilikom optimizacije kompajliranog koda.

Pretragom za "tail recursion" i "tail call" možeš naći poveći broj članaka koji objašnjavaju generalni koncept iza tail rekurzije sa primerima za konkretne jezike.

ivan90BG
8.1.2014, 21:10
Odgovor na postavljeno pitanje (koliki je stack) glasi da je maksimalna veličina stack-a zavisi od kompajlera i operativnog sistema, a najčešće se može menjati pri komapjliranju i tokom izvršavanja programa, podrazumevane vrednosti se okvirno kreću od 1 do 8 megabajta (što je prilično, jer u normalnim aplikacijama jako je malo verovatno da neki algoritam toliko nagura stack u normalnom radu), a kad se kreiraju threadovi (ako nisam izlapeo) može da se zada maksimalna veličina stacka za kreirani thread.

Ivan452
11.1.2014, 2:33
Mislim da kompajler ne može da zada veličinu stack-a, već da je ograničenje samo na nivou operativnog sistema. Na Unix-like platformama veličina stacka se čuva u enviroment varijablama.
Tako da mislim da kompajler ne može direktno da utiče, ali OS u svakom slučaju daje poslednju reč.

Default vrednosti:
SunOS/Solaris - 8172K bytes
Linux - 8172K bytes
Windows - 1024K bytes

Maksimalne vrednosti
SunOS/Solaris - neograničeno
Linux - 8172K bytes
Windows - 32768K bytes

Nemoj me držati za reč za ove vrednosti.