Modificação do tamanho da pilha por ulimit -s

4

Quando digito ulimit -s no terminal, ele mostra 8192 . Isso significa que no meu código C eu poderia ter apenas uma variável local de 8192 bytes?

Estou confuso com o tamanho da pilha. O ulimit -s muda quando modificamos seu valor?

    
por user2383973 12.07.2013 / 03:03

1 resposta

9

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á.

    
por January 12.07.2013 / 07:39