Différence Entre L'optimisation Du Code Dépendant De La Machine Et Indépendante De La Machine

Table des matières:

Différence Entre L'optimisation Du Code Dépendant De La Machine Et Indépendante De La Machine
Différence Entre L'optimisation Du Code Dépendant De La Machine Et Indépendante De La Machine

Vidéo: Différence Entre L'optimisation Du Code Dépendant De La Machine Et Indépendante De La Machine

Vidéo: Différence Entre L'optimisation Du Code Dépendant De La Machine Et Indépendante De La Machine
Vidéo: 36e Forum ORAP, Jean Michel Alimi 2024, Mai
Anonim

Différence clé - Optimisation du code dépendant de la machine ou indépendante de la machine

Les programmes informatiques sont des ensembles d'instructions données au matériel, pour effectuer des tâches. Ces programmes sont principalement écrits dans des langages de haut niveau, et l'ordinateur ne comprend pas ce langage. Par conséquent, un compilateur est utilisé pour convertir ces instructions en code machine ou code cible. Il passe par plusieurs phases pour construire le code cible. L'optimisation du code en fait partie. Il existe deux techniques d'optimisation telles que l'optimisation du code dépendant de la machine et indépendante de la machine. La principale différence entre l'optimisation du code dépendant de la machine et indépendante de la machine est que l'optimisation dépendante de la machine est appliquée au code objet tandis que l'optimisation du code indépendante de la machine est appliquée au code intermédiaire.

CONTENU

1. Présentation et différence clé

2. Qu'est-ce que l'optimisation du code dépendant de la machine

3. Qu'est-ce que l'optimisation du code indépendante de la machine

4. Similitudes entre l' optimisation du code dépendant de la machine et indépendante de la machine

5. Comparaison côte à côte - Optimisation du code dépendant de la machine et indépendante de la machine sous forme tabulaire

6. Résumé

Qu'est-ce que l'optimisation du code dépendant de la machine?

Lors de la conversion du code source en code objet ou en code cible, le compilateur passe par plusieurs phases. Tout d'abord, le code source est donné à l'analyseur lexical qui produit des jetons. Ensuite, la sortie est donnée à l'analyseur de syntaxe qui vérifie si les jetons générés sont dans l'ordre logique. Cette sortie est donnée à l'analyseur sémantique. Supposons qu'il existe un morceau de code comme p = q + r;

Ici, p, q sont des nombres entiers, mais r est un flottant. À l'aide de l'analyseur sémantique, la variable entière c est convertie en un flottant. Par conséquent, il effectue l'analyse sémantique. La sortie de l'analyseur sémantique va au générateur de code intermédiaire. Il renvoie un code intermédiaire qui va ensuite à l'optimiseur de code. L'optimisation du code est le processus d'élimination des instructions de programme non essentielles sans changer la signification du code source réel. Ce n'est pas une optimisation obligatoire mais, elle peut améliorer la durée d'exécution du code cible. La sortie de l'optimiseur de code est donnée au générateur de code, et enfin, le code cible est construit.

Différence entre l'optimisation du code dépendant de la machine et indépendante de la machine
Différence entre l'optimisation du code dépendant de la machine et indépendante de la machine

Figure 01: Phases du compilateur

Dans l'optimisation du code dépendant de la machine, l'optimisation est appliquée au code source. L'allocation d'une quantité suffisante de ressources peut améliorer l'exécution du programme dans cette optimisation.

Qu'est-ce que l'optimisation de code indépendante de la machine?

Lorsque l'optimisation est effectuée sur le code intermédiaire, on parle d'optimisation de code indépendante de la machine. Il existe différentes techniques pour réaliser une optimisation du code indépendante de la machine. Ils sont décrits à l'aide des exemples suivants.

Lisez les lignes de code ci-dessous.

pour (j = 0; j <10; j ++) {

b = x + 2;

a [j] = 5 * j;

}

Selon le code ci-dessus, b = x + 2 est calculé encore et encore à chaque itération. Une fois que b est calculé, il ne change pas. Ainsi, cette ligne peut être placée en dehors de la boucle comme suit.

b = x + 2;

pour (j = 0; j <10; j ++)

{a [j] = 5 * j;

}

C'est ce qu'on appelle le mouvement de code.

Lisez les lignes de code ci-dessous.

j = 5;

si (j == 10) {

a = b + 20;

}

Selon le code ci-dessus, 'if block' ne s'exécutera jamais car la valeur j ne sera jamais égale à 10. Il est déjà initialisé à la valeur 5. Par conséquent, ce bloc if peut être supprimé. Cette technique est l'élimination du code mort.

Une autre méthode est la réduction de la résistance. Les opérations arithmétiques telles que la multiplication nécessitent plus de mémoire, de temps et de cycles CPU. Ces expressions coûteuses peuvent être remplacées par des expressions bon marché comme b = a * 2; ou peut être remplacé par addition, b = a + a;

Reportez-vous au code ci-dessous.

pour (j = 1; j <= 5; j ++) {

valeur = j * 5;

}

Au lieu de la multiplication, le code peut être modifié comme suit.

int temp = 5;

pour (j = 1; j <= 5; j ++) {

temp = température + 5;

valeur = temp;

}

Il est possible d'évaluer les expressions qui sont des constantes à l'exécution. C'est ce qu'on appelle le pliage constant. On peut dire comme b [j + 1] = c [j + 1];

Au lieu de cela, il peut être modifié comme suit.

n = j +1;

b [n] = c [n];

Il peut y avoir des boucles comme suit.

pour (j = 0; j <5; j ++) {

printf ("a / n");

}

pour (j = 0; j <5; j ++) {

printf ("b / n");

}

En imprimant a et b, les deux ont le même nombre d'itérations. Les deux peuvent être combinés en une boucle for comme suit.

pour (j = 0; j <5; j ++) {

printf ("a / n");

printf ("b / n");

}

Une autre technique importante est l'élimination des sous-expressions communes. Il s'agit de remplacer les expressions identiques par une seule variable pour faire le calcul. Reportez-vous au code ci-dessous.

a = b * c + k;

d = b * c + m;

Ce code peut être converti comme suit.

temp = b * c;

a = température + k;

d = température + m;

Il n'est pas nécessaire de calculer b * c encore et encore. La valeur multipliée peut être stockée dans une variable et réutilisée.

Quelle est la similitude entre l'optimisation du code dépendant de la machine et indépendante de la machine?

Ces deux éléments appartiennent à l'optimisation du code

Quelle est la différence entre l'optimisation du code dépendant de la machine et indépendante de la machine?

Diff article au milieu avant la table

Optimisation du code dépendant de la machine ou indépendante de la machine

L'optimisation du code dépendant de la machine est appliquée au code objet. L'optimisation du code indépendante de la machine est appliquée au code intermédiaire.
Implication avec le matériel
L'optimisation dépendante de la machine implique des registres CPU et des références de mémoire absolues. L'optimisation du code indépendante de la machine n'implique pas de registres CPU ou de références de mémoire absolues.

Résumé - Optimisation du code dépendant de la machine ou indépendante de la machine

L'optimisation du code consiste en deux techniques d'optimisation, à savoir l'optimisation du code dépendant de la machine et indépendante de la machine. La différence entre l'optimisation du code dépendant de la machine et indépendante de la machine est que l'optimisation dépendante de la machine est appliquée au code objet, tandis que l'optimisation du code indépendante de la machine est appliquée au code intermédiaire.

Téléchargez la version PDF de l'optimisation de code dépendant de la machine ou indépendante de la machine

Vous pouvez télécharger la version PDF de cet article et l'utiliser à des fins hors ligne selon la note de citation. Veuillez télécharger la version PDF ici Différence entre l'optimisation du code dépendant de la machine et indépendante de la machine

Recommandé: