Stack overflow

Stack overflow

Dépassement de pile

En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l'écriture dans une pile, écrit à l'extérieur de l'espace alloué à la pile, écrasant ainsi des informations nécessaires au processus.

L’expression dépassement de pile peut s’appliquer à toutes les piles. Cependant, lorsque l’on parle de dépassement de pile, on fait habituellement référence à la pile d'exécution. Il serait alors plus précis de dire dépassement de la pile d’exécution, mais les informaticiens ont pris l’habitude de dire simplement dépassement de pile lorsque le contexte indique que la pile dont on parle est la pile d’exécution.

Le reste de cet article traite de dépassement de la pile d’exécution.

Dans tous les langages de programmation, la pile d'exécution contient une quantité limitée de mémoire, habituellement déterminée au début du programme. La taille de la pile d'exécution dépend de nombreux facteurs, incluant le langage de programmation, l’architecture du processeur, l’utilisation du traitement multifil (multi-threading) et de la quantité de mémoire vive disponible. Lorsque trop d’informations sont enregistrées dans la pile d’exécution, la pile déborde et écrase des zones de programme à l’extérieur de la pile. On dit alors qu’il y a dépassement de pile ou dépassement de la pile d’exécution. Il en résulte généralement une interruption du programme.[1]

Sommaire

Causes principales des dépassements de la pile d’exécution

Un dépassement de pile d’exécution est généralement causé par l'une des deux erreurs de programmation suivantes[2] :

Récursivité infinie

La cause la plus fréquente des dépassements de pile est une récursivité trop profonde ou infinie.

Il est à noter qu’une récursivité profonde ou même infinie ne cause pas toujours un dépassement de pile. En effet, certains langages, comme Scheme, permettent une sorte récursivité infinie, la récursion terminale (en anglais, tail recursion) sans dépassement de pile. Pour ce faire, ces langages transforment la récursivité en une itération, éliminant ainsi l’utilisation de la pile d’exécution.[3]

Exemples de récursivité infinie

Récursivité infinie avec une seule fonction (en langage C++)

 void a() {
   a(); 
 }
 int main () {
   a();
   return 0;
 }

Dans l’exemple précédent, le programme appelle la fonction a() et la fonction a() s’appelle elle-même, ce qui crée une boucle infinie.

Récursivité infinie avec deux fonctions (en langage C++)

 void f(void);
 void g(void);

 int main(void) {
   f();
   return 0;
 }

 void f(void) {
   g();
 }

 void g(void) {
   f();
 }

Les fonctions f() et g() s’appellent l’une l’autre jusqu'à ce que la pile déborde.

Allocation de variables trop grandes dans la pile

L'autre grande cause de dépassement de pile résulte d'une tentative d'allouer plus d’espace dans la pile que ce que la pile peut contenir. Cela est généralement le résultat de la déclaration de variables locales demandant trop de mémoire. Pour cette raison, les tableaux de plus de quelques kilo-octets devraient toujours être alloués dynamiquement plutôt que comme une variable locale.[4]


Exemple d’allocation de variables trop grandes dans la pile

 int main() {
   double n[10000000]; 
   return 0;
 }

Le tableau déclaré consomme plus de mémoire que ce qui est disponible dans la pile.

Situations aggravantes de dépassement de pile d’exécution

Les dépassements de la pile d’exécution sont aggravés par tout ce qui réduit la taille de la pile. Par exemple, un programme sans traitement multifil (multi-thread) peut fonctionner correctement, mais dès que le traitement multifil est activé, le même programme peut se retrouver en état de dépassement de pile. La raison en est que la plupart des programmes avec des fils ont moins d'espace pile par fil que le même programme sans fil n’en a pour sa pile unique.

Source

Cet article provient partiellement d'une traduction de l'article correspondant dans la version anglaise de Wikipédia.

Références

Voir aussi

Articles connexes

  • Portail de la programmation informatique Portail de la programmation informatique
  • Portail de la sécurité informatique Portail de la sécurité informatique
Ce document provient de « D%C3%A9passement de pile ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Stack overflow de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Stack Overflow — URL: www.stackoverflow.com Коммерческий: да Тип сайта: Система вопросов и ответов …   Википедия

  • Stack overflow — In software, a stack overflow occurs when too much memory is used on the call stack. In many programming languages the call stack contains a limited amount of memory, usually determined at the start of the program. The size of the call stack… …   Wikipedia

  • Stack Overflow — Pufferüberläufe (engl. buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können. Im Wesentlichen werden bei einem Pufferüberlauf durch Fehler im Programm zu große …   Deutsch Wikipedia

  • Stack Overflow — Pour les articles homonymes, voir Stack overflow (homonymie). Stack Overflow …   Wikipédia en Français

  • Stack overflow (homonymie) — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Stack overflow peut signifier: dépassement de pile une erreur de programmation. Stack Overflow un site web de question réponse. Catégorie : Homonymie …   Wikipédia en Français

  • Call stack overflow — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

  • Stack Exchange Network — Stack Exchange Network  сеть вебсайтов для работы с вопросами и ответами в различных областях. Сайты позволяют пользователям задавать вопросы и отвечать на них. Путем учёта активной деятельности, происходит голосование за вопросы и ответы,… …   Википедия

  • Stack buffer overflow — In software, a stack buffer overflow occurs when a program writes to a memory address on the program s call stack outside of the intended data structure; usually a fixed length buffer.cite web last = Fithen first = William L coauthors = Seacord,… …   Wikipedia

  • Stack (data structure) — In computer science, a stack is an abstract data type and data structure based on the principle of Last In First Out (LIFO) . Stacks are used extensively at every level of a modern computer system. For example, a modern PC uses stacks at the… …   Wikipedia

  • Stack-based memory allocation — Stacks in computing architectures are regions of memory where data is added or removed in a Last In First Out manner.In most modern computer systems, each thread has a reserved region of memory referred to as its stack. When a function executes,… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”