Изменение размера стека с помощью ulimit -s

Когда я набираю ulimit -s в терминале, отображается 8192. Означает ли это, что в моем C-коде у меня может быть только локальная переменная размером 8192 байта?

Я не понимаю, какой размер стека. Меняется ли ulimit -s при изменении его значения?

6
задан 12 July 2013 в 16:47

1 ответ

В первую очередь, это - 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), это будет работать.

10
ответ дан 12 July 2013 в 16:47

Другие вопросы по тегам:

Похожие вопросы: