Prikaži potpunu verziju : Stek na modernim kompajlerima.
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;
}
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.
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.
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.
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.