Maison >développement back-end >C++ >Comment ajuster la taille de la pile pour les applications C sous Linux à l'aide du compilateur GNU ?

Comment ajuster la taille de la pile pour les applications C sous Linux à l'aide du compilateur GNU ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 02:52:08598parcourir

How to Adjust the Stack Size for C   Applications on Linux Using GNU Compiler?

Ajustement de la taille de la pile sous Linux pour les applications C à l'aide du compilateur GNU

Sous Linux, la taille de la pile pour une application C compilée avec le compilateur GNU peut être modifié pour éviter les erreurs de débordement de pile. Bien que la syntaxe utilisée dans OSX (LD_FLAGS= -Wl,-stack_size,0x100000000) puisse ne pas fonctionner sous SUSE Linux, il existe des méthodes alternatives pour obtenir le même résultat.

Une approche consiste à augmenter la taille de la pile par programme dans l'application elle-même. Cela peut être fait en utilisant la fonction setrlimit fournie par le fichier fichier d'en-tête. Voici un exemple :

#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;
}

En augmentant la taille de la pile au sein de l'application, vous pouvez vous assurer qu'elle dispose d'une allocation de mémoire suffisante pour gérer des opérations complexes ou des structures de données volumineuses sans rencontrer d'erreurs de débordement de pile. Il est important de noter, cependant, que les variables locales trop volumineuses doivent être déclarées dans les fonctions appelées depuis main pour éviter les débordements de pile avant que le code getrlimit/setrlimit ne prenne 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn