Qu'est-ce que Débordement (spill) ?

En allocation de registres, sauvegarde de certaines valeurs en mémoire (pile) lorsque les valeurs simultanément vivantes dépassent le nombre de registres. Les instructions de sauvegarde et de rechargement ralentissent l'exécution.

Nom japonais: スピル

« Débordement (spill) » apparaît dans 24 questions d'entraînement réparties sur 14 thèmes, dont Compilateurs, Circuits logiques, Éditeurs de liens, chargeurs et exécutables.

Domaine: Compilateurs

S'entraîner : questions sur Débordement (spill)

Que devient la valeur d'un nombre binaire décalé d'un bit vers la gauche (en l'absence de débordement) ?

  1. AElle double
  2. BElle est divisée par deux
  3. CElle augmente de 1
Afficher la réponse et l'explication

Réponse : A. Elle double

En binaire, chaque rang ayant un poids double du précédent, un décalage d'un bit vers la gauche avec insertion d'un 0 en poids faible double la valeur, et un décalage vers la droite la divise par deux (troncature). Un décalage de n bits multiplie ou divise par 2ⁿ. Bien plus petit et rapide qu'un multiplieur-diviseur, il est utilisé par les compilateurs pour remplacer x × 8 par x << 3. Pour le décalage à droite d'un nombre signé, il faut utiliser le décalage arithmétique, qui recopie le bit de signe, sinon les nombres négatifs ne sont pas correctement divisés.

Lors de l'addition de nombres en complément à deux, quelle est la condition correcte indiquant un débordement (overflow) ?

  1. ALorsque la retenue entrant dans le bit de poids fort et la retenue sortant du bit de poids fort sont différentes
  2. BLorsque le résultat vaut 0
  3. CLorsque la somme des bits de poids faible vaut 1
Afficher la réponse et l'explication

Réponse : A. Lorsque la retenue entrant dans le bit de poids fort et la retenue sortant du bit de poids fort sont différentes

En addition en complément à deux, il y a débordement lorsque la somme de deux positifs est négative ou celle de deux négatifs positive ; on le détecte par le fait que la retenue entrant dans le bit de poids fort diffère de celle qui en sort (XOR des deux égal à 1). Par exemple, sur 4 bits, 0111 (7) + 0001 (1) = 1000 (−8). L'addition de nombres de signes opposés ne déborde jamais. Les CPU distinguent ce débordement par l'indicateur V, et le débordement non signé par l'indicateur C.

« Débordement (spill) » dans les explications

Questions mentionnant « Débordement (spill) » (24)

  1. Que devient la valeur d'un nombre binaire décalé d'un bit vers la gauche (en l'absence de débordement) ?
  2. Lors de l'addition de nombres en complément à deux, quelle est la condition correcte indiquant un débordement (overflow) ?
  3. Dans une FIFO asynchrone dont le côté écriture est à 100 MHz et le côté lecture à 80 MHz, le côté écriture écrit des rafales de 100 mots à raison d'un mot par cycle, et le côté lecture lit un mot par cycle. Il y a suffisamment de temps de repos entre les rafales. Quelle est la profondeur minimale nécessaire pour éviter tout débordement (le retard dû à la synchronisation est ignoré) ?
  4. Le côté écriture écrit, à 200 MHz, des rafales de 120 mots à raison d'un mot par cycle. Le côté lecture, avec une horloge de 150 MHz, ne lit un mot que pendant 2 cycles sur 3. Quelle est la profondeur minimale nécessaire pour éviter tout débordement (le retard dû à la synchronisation est ignoré) ?
  5. Lors de la multiplication de deux nombres non signés de 8 bits, combien de bits faut-il pour représenter le résultat sans débordement ?
  6. Pour l'addition de deux entiers non signés, quelle méthode détermine correctement que le résultat a dépassé la plage représentable (débordement) ?
  7. Par combien le résultat t0 de l'instruction RISC-V « slli t0, a0, 3 » multiplie-t-il la valeur de a0 (sans tenir compte du débordement) ?
  8. Lorsqu'un « déversement » (spill) se produit lors de l'allocation de registres, qu'advient-il du code généré ?
  9. En C, le débordement d'un entier signé est un comportement indéfini. Sur cette base, quel code un compilateur optimisant la fonction ci-dessus peut-il générer ?
  10. Quelle est la plage d'entiers représentable en complément à deux sur 8 bits ?
  11. Quel est le rôle de l'ALU (unité arithmétique et logique) du processeur ?
  12. Quelle zone est généralement utilisée pour sauvegarder temporairement l'adresse de retour, entre autres, lors de l'appel d'un sous-programme (fonction) ?
  13. Comment appelle-t-on le phénomène par lequel les charges débordent d'un pixel recevant une lumière très intense et s'étalent en blanc sur les pixels voisins ?
  14. Pour l'allocation de registres par coloration du graphe d'interférence, quelle combinaison de ce que représentent nœuds et arêtes est correcte ?
  15. Quel effet produit l'optimisation des appels terminaux appliquée au dernier appel récursif de la fonction ci-dessus ?

Termes associés

Tas (heap) Complément à deux Débit (throughput) Allocation de registres Adresse de retour Via Décalage arithmétique FIFO asynchrone Pointeur de pile CMOS

Retour au glossaire