Éditeurs de liens, chargeurs et exécutables

Lorsqu'une récursion trop profonde dépasse la limite de la pile, que se passe-t-il généralement sous Linux notamment ?

  1. ALe programme touche la page de garde à accès interdit située au-delà de la pile et se termine anormalement
  2. BL'OS déplace automatiquement la pile sur disque, permettant une récursion de profondeur illimitée
  3. CLes anciens cadres de pile sont automatiquement effacés et le calcul se poursuit correctement
Afficher la réponse et l'explication

Réponse : A. Le programme touche la page de garde à accès interdit située au-delà de la pile et se termine anormalement

La pile a une limite, au-delà de laquelle se trouve une page de garde à accès interdit. Si une récursion trop profonde amène la pile jusqu'à cette page, un défaut de page survient et l'OS arrête le programme (erreur de segmentation). L'avantage de la page de garde est d'arrêter le programme avant qu'il ne corrompe d'autres données. Déclarer un grand tableau en variable locale produit le même effet ; il est donc plus sûr de placer les grandes données dans le tas.

S'entraîner sur ce thème Retour au thème

Autres questions sur Éditeurs de liens, chargeurs et exécutables

  1. En C, quelle affirmation concernant la valeur initiale d'une variable locale et d'une variable globale déclarées sans valeur initiale est correcte ?
  2. À force de répéter malloc et free, il peut devenir impossible d'allouer un grand bloc d'un seul tenant alors que la mémoire libre totale est suffisante. Comment appelle-t-on ce phénomène ?
  3. Lors de la création d'une bibliothèque partagée, quel est l'avantage de n'exporter que les fonctions utilisées de l'extérieur et de régler la visibilité des symboles des fonctions internes sur « hidden » ?
  4. En C++, quel est le mécanisme correct par lequel les constructeurs d'objets globaux s'exécutent avant main ?
  5. Quelle affirmation concernant le fichier objet (.o) produit par le compilateur à partir d'un fichier source est correcte ?

Comparatifs sur ce thème