Когда я набираю ulimit -s
в терминале, отображается 8192
. Означает ли это, что в моем C-коде у меня может быть только локальная переменная размером 8192 байта?
Я не понимаю, какой размер стека. Меняется ли ulimit -s
при изменении его значения?
В первую очередь, это - 8 192 килобайта и не байты. Стек Furthermore является одной вещью, переменная - другой и еще одна "куча". Посмотрите это объяснение различий между стеком и "кучей", например, или этой страницей. Насколько я знаю, что стек используется для локальных и недолгих переменных, и он зависит от компилятора, или стек или "куча" используются.
Насколько я могу сказать, если Вы используете [mc]alloc
и друзья для выделения памяти Вы не затрагиваете на стек, и пределы не содержат.
Но да, пробуя следующее в ulimit -s
равняйтесь 8 192, приведет к отказу сегментации:
#include <stdlib.h>
int main() {
char foo[10000000] ;
foo[0] = 'a' ;
exit( 0 ) ;
}
Здесь, переменная foo
является слишком большим.
$ gcc test.c
$ ./a.out
Segmentation fault (core dumped)
Однако, если Вы изменяете ulimit (например. ulimit -s 16000
), это будет работать.