Contrairement à macOS, où LD_FLAGS peut être utilisé pour spécifier la taille de la pile lors de la compilation C avec g , les distributions Linux comme SUSE Linux affichent des erreurs lorsqu'elles rencontrent une telle commande. Ce problème survient en raison de l'indisponibilité de l'option --stack dans l'éditeur de liens Linux.
Pour contourner cet obstacle, une approche alternative consiste à définir la taille de la pile par programme dans l'application elle-même. En tirant parti de la fonction setrlimit, les développeurs peuvent modifier la taille de la pile après la compilation de l'application. Voici un extrait de code illustratif :
#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; }
Veuillez noter que l'utilisation de cette méthode nécessite d'éviter de déclarer de grandes variables locales dans la fonction main(), car cela pourrait entraîner un débordement de pile avant l'exécution de l'ajustement de la taille de la pile. Au lieu de cela, définissez ces variables dans les fonctions appelées depuis main(), une fois la taille de la pile modifiée avec succès.
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!