Bloc de base
Dans le calculant , un bloc de base est le code qui a un point d'entrée (c., aucun code dans lui n'est la destination d'une instruction de saut ), un point de sortie et aucunes instructions de saut contenus dans lui. Le début d'un bloc de base peut être sauté à de plus d'un endroit. L'extrémité d'un bloc de base peut être une instruction de saut ou le rapport avant la destination d'une instruction de saut. Les blocs de base sont habituellement l'unité de base à laquelle les optimisations de compilateur sont appliquées. Les blocs de base forment les sommets ou les noeuds dans un graphique de flux de commande .
Le code peut être le code source , le code d'Assemblée de ou un autre ordre des instructions.
Plus formellement, un ordre des instructions forme un bloc de base si l'instruction dans chaque de position domine ou s'exécute toujours avant, tout ceux en positions postérieures, et aucune autre instruction ne s'exécute entre deux instructions dans l'ordre. Cette définition est plus générale que l'intuitive par certains côtés. Par exemple, elle permet des sauts sans conditions aux étiquettes non visées par d'autres sauts. Cette définition incarne les propriétés avec lesquelles rendre les blocs de base faciles à travailler en construisant un algorithme.
Les blocs auxquels la commande peut transférer après atteinte de l'extrémité d'un bloc s'appellent les successeurs du de ce bloc, dont alors que les blocs commande ont pu être venu en écrivant un bloc s'appellent les prédécesseurs du de ce bloc.
L'algorithme pour produire des blocs de base d'une liste de code est simple : vous balayez au-dessus du code, marquant les frontières de bloc de , qui sont des instructions qui peuvent commencer ou finir un bloc parce qu'elles l'une ou l'autre commande de transfert ou acceptent la commande d'un autre point. Puis, la liste est simplement " ; cut" ; à chacun de ces points, et aux blocs de base rester. Noter que cette méthode ne produit pas toujours des blocs de base maximaux du , par la définition formelle, mais ils sont habituellement suffisants.
Les instructions qui finissent un bloc de base incluent le
Le sans conditions et conditionnel s'embranche tous les deux directs et indirects.
Le renvoie à une procédure de intervention
Instructions qui peuvent jeter une exception
Les appels de fonction peuvent être à l'extrémité d'un bloc de base s'ils peuvent ne pas retourner, comme les fonctions qui jettent des exceptions ou le special appelle comme le longjmp et exit de s de C le '.
Les instructions qui commencent un nouveau bloc de base incluent le
Points d'entrée de procédé et de fonction
Cibles des sauts ou des branches
" ; Tomber-through" ; instructions suivant quelques branches conditionnelles
Instructions suivant ceux qui jettent des exceptions
Traiteurs d'exception
Noter que, parce que la commande peut ne jamais passer par l'extrémité d'un bloc de base, quelques frontières de bloc peuvent devoir être modifiées après conclusion des blocs de base. En particulier, tomber-à travers les branches conditionnelles doit être changé en branches bi-directionnelles, et les appels de fonction jetant des exceptions doivent avoir des sauts sans conditions supplémentaires après eux. Faire ces derniers peut exiger ajouter des étiquettes au commencement d'autres blocs.
Voir également
Graphique de flux de commande
.
| Random links: | Union postale universelle | 1989 dans la musique | De service | Championnat sud-américain 1929 | Parc d'Overbrook, Philadelphie, Pennsylvanie | Bloque_básico |