web-dev-qa-db-fra.com

Modification de la taille de la pile par ulimit -s

Lorsque je tape ulimit -s dans le terminal, il affiche 8192. Est-ce que cela signifie que dans mon code C, je ne pourrais avoir qu'une variable locale de 8192 octets?

Je suis confus quelle taille de pile. Est-ce que ulimit -s change lorsque nous modifions sa valeur?

6
user2383973

Tout d’abord, il s’agit de 8192 kilo octets, et non d’octets. De plus, la pile est une chose, la variable en est une autre, et encore une autre. Voir cette explication des différences entre pile et tas, par exemple, ou cette page . Autant que je sache, la pile est utilisée pour les variables locales et à vie courte, et cela dépend du compilateur si la pile ou le tas est utilisé.

Autant que je sache, si vous utilisez [mc]alloc et des amis pour allouer de la mémoire, vous ne touchez pas à la pile et les limites ne sont pas respectées.

Mais oui, essayer ce qui suit à ulimit -s égal à 8192 entraînera une erreur de segmentation:

#include <stdlib.h>

int main() {
  char foo[10000000] ;
  foo[0] = 'a' ;
  exit( 0 ) ;
}

Ici, la variable foo est trop grande.

$ gcc test.c
$ ./a.out
Segmentation fault (core dumped)

Toutefois, si vous modifiez le paramètre ulimit (par exemple, ulimit -s 16000), cela fonctionnera.

10
January