Comment gérer ou éviter un débordement de la pile en C++

En C++ un débordement de pile conduit généralement à une irrémédiable de plantage du programme. Pour les programmes qui doivent être vraiment robuste, c'est un comportement inacceptable, en particulier parce que la taille de la pile est limitée. Quelques questions sur la façon de gérer le problème.

  1. Est-il un moyen pour empêcher le débordement de pile par une technique générale. (Une solution évolutive, robuste solution, qui comprend traiter avec les bibliothèques externes de manger beaucoup de pile, etc.)

  2. Est-il un moyen de gérer les débordements de pile dans le cas où ils se produisent? De préférence, la pile devient déroulé jusqu'à ce qu'il y a un gestionnaire de traiter avec un peu problème.

  3. Il y a des langues, qui ont des fils extensible avec des piles. C'est quelque chose comme que possible en C++?

Tout autres commentaires utiles à la solution du C++ comportement serait appréciée.

  • support.microsoft.com/kb/315937
  • La norme ne mentionne même pas la pile, vous devez spécifier la plate-forme de ciblage; plusieurs plates-formes de fournir des moyens pour intercepter le dépassement de pile ou même d'obtenir un "stack overflow" alerte lorsque la pile est presque épuisée.
  • Personnellement, je trouve qu'un Débordement de Pile n'est pas quelque chose à éviter, mais embrasser. Il suffit de regarder la grande communauté!
  • La seule chose qu'il vaut la peine de regarder est pile "fuites", où d'importantes fonctions ont tendance à s'appellent eux-mêmes (ou d'autres) de manière récursive, qui a entraîné une "accumulation" de programme de l'etat (je n'ai jamais vu cela se produire, et que vous pensez que votre programme serait présentent un grand nombre d'autres tumeurs et des troubles de l'avant c'est devenu évident, mais qui ne rend pas impossible). Peut-être aussi une limite sur toutes les fonctions récursives vous allez utiliser.
  • Version moderne de Beugler de Canard lien? msdn.microsoft.com/en-us/library/89f73td2.aspx
  • L'utilisation d'un smart compilateur: gcc -fsplit-stack, et vous êtes plus susceptibles d'avoir un débordement de pile que vous êtes à court de mémoire.
  • Qu'est-ce compilateur option?
  • Jamais trouvé de débordement de pile à être un problème, (sur OS de bureau, de toute façon). Il est arrivé, bien sûr, mais seulement en raison d'une grave cockup de ma part, facilement et de débogage. En comparaison avec la grande majorité de vraiment méchant de bugs, DONC, est un non-problème.
  • Comme son nom l'indique, divise la pile. L'idée est que vous commencez avec une petite pile et le compilateur instruments de l'exécution de la faire grandir que vous en avez besoin, éventuellement discontiguously (comme l'espace d'adressage de mémoire va). Évidemment, cela peut ralentir le programme un peu, je n'ai pas exactement par qui de marge si. J'ai seulement de la gcc à l'appui de cette option; Clang + LLVM ne fonctionne pas et je n'ai jamais entendu parler de MSVC.
  • Génial. C'est le genre de chose que je cherchais.
  • StackOverflow erreur vient du fait que vous êtes l'allocation de trop grandes variable ou un tableau. Vous allouer plus efficacement que les grandes variable/tableau de tas.