Primeiramente, são 8192 kilo bytes e não bytes. Além disso, a pilha é uma coisa, a variável é outra e a pilha é outra. Veja esta explicação das diferenças entre pilha e heap, por exemplo ou esta página . Tanto quanto eu sei pilha é usada para variáveis locais e curta duração, e isso depende do compilador se pilha ou pilha são usados.
Tanto quanto eu posso dizer, se você usa [mc]alloc
e amigos para alocar memória, você não está tocando a pilha, e os limites não valem.
Mas sim, tentar o seguinte em ulimit -s
igual a 8192 resultará em uma falha de segmentação:
#include <stdlib.h>
int main() {
char foo[10000000] ;
foo[0] = 'a' ;
exit( 0 ) ;
}
Aqui, a variável foo
é muito grande.
$ gcc test.c
$ ./a.out
Segmentation fault (core dumped)
No entanto, se você alterar o ulimit (por exemplo, ulimit -s 16000
), funcionará.