Kto definiuje wielkosc stosu, oraz co jest odkladane na stosie

0

Witam. Gdy kompilujemy program, powiedzmy w c, kto decyduje jakiej wielkosci jest stos, jakie zmienne sa tam odkladane a jakie nie, itd? Czy mozna jakos na to wplywac (np. powiedziec ze chce stos nia 10kb a 100?).

0

Zdaje się, że system operacyjny.

Linux:

endrju@kormoran ~ $ ulimit -a | grep stack
stack size              (kbytes, -s) 8192

Żeby zmienić należy użyć opcji -s oraz liczby, która ma być nowym rozmiarem stosu w KiB.

Edit: to jest tylko miękki limit, patrz mój post niżej.

0

ulimit pokazuje limity ustalone przez system operacyjny. Wielkosci stosu i alokacja sa wkompilowane w program, ktory mogl byc tworzony na innym systemie z innymi ustawieniami. Wydaje mi sie ze nie masz tutaj racji, ale chetnie poczekam na inne opinie.

0

No ok, linker może to zmienić (na niektórych systemach), program sam może sobie ustawić. Ale to system operacyjny wymusza górny limit, którego zwykły program nie może przekroczyć.

Jeżeli chodzi o Linuksa zobacz:

http://linux.die.net/man/5/limits.conf
http://linux.die.net/man/2/setrlimit
Oraz manual ld parametr --stack.

Edit:

Otóż to co napisałem w pierwszym poście nie jest do końca prawdą, ulimits podaje domyślnie miękki limit. Okazuje się, że domyślnym twardym limitem jest u mnie nieskończoność. Szybka zmiana w /etc/security/limits.conf pozwoliła zmienić twardy limit. Jest on wypisywany jeżeli użyje się ulimits -Ha lub od razu ulimits -Hs. Nie da się rozszerzyć rozmiaru stosu poza twardy limit a miękki jest używany jako domyślny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1