En C, la taille de la pile peut être ajustée lors de la compilation pour répondre aux besoins spécifiques en mémoire d'une application particulière . Bien que l'option LD_FLAGS fonctionne bien sous macOS avec g , les distributions Linux telles que SUSE Linux utilisent une approche différente.
Pour augmenter la taille de la pile sous Linux pour une seule application utilisant GCC, deux méthodes principales sont couramment utilisées :
La commande ulimit -s peut être utilisée pour définir la limite de taille de pile pour un utilisateur ou un processus spécifique. Cependant, cette méthode nécessite des privilèges élevés et doit être exécutée avant de lancer l'application. Par exemple :
ulimit -s unlimited
Alternativement, la taille de la pile peut être définie par programme dans le code de l'application à l'aide de setrlimit. Cette méthode est plus portable et permet aux applications d'ajuster dynamiquement la taille de leur pile au moment de l'exécution. L'extrait de code suivant montre comment augmenter la taille de la pile à 16 Mo :
#include <sys/resource.h> int main (int argc, char **argv) { const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { if (rl.rlim_cur < kStackSize) { rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if (result != 0) { fprintf(stderr, "setrlimit returned result = %d\n", result); } } } // ... return 0; }
Notez que même avec cette méthode, il est important d'éviter de déclarer des variables locales volumineuses dans main() car un débordement de pile peut se produire avant l'ajustement de la taille de la pile prend effet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!