Počítačové programy sú súbory inštrukcií poskytnutých hardvéru na vykonávanie úloh. Tieto programy sú väčšinou napísané v jazykoch vysokej úrovne a počítač tomuto jazyku nerozumie. Preto sa kompilátor používa na prevod týchto pokynov na strojový alebo cieľový kód. Vytvorenie cieľového kódu prechádza niekoľkými fázami. Optimalizácia kódu je jedným z nich. Existujú dve optimalizačné techniky, ako je strojovo závislá a strojovo nezávislá optimalizácia kódu. kľúčový rozdiel medzi strojovo závislou a strojovo nezávislou optimalizáciou kódu je, že optimalizácia závislá na stroji sa použije na objektový kód, zatiaľ čo optimalizácia kódu nezávislého na stroji sa použije na prechodný kód.
1. Prehľad a kľúčový rozdiel
2. Čo je to optimalizácia kódu závislá od stroja
3. Čo je optimalizácia kódu nezávislá od stroja
4. Podobnosti medzi strojovo závislou a optimalizáciou kódu nezávislou na stroji
5. Porovnanie bok po boku - optimalizácia kódu nezávislého od stroja v závislosti od stroja v tabuľkovej forme
6. Zhrnutie
Pri prevode zdrojového kódu na kód objektu alebo cieľový kód kompilátor prechádza niekoľkými fázami. Najprv sa zdrojový kód pridelí analyzátoru Lexical, ktorý vytvára tokeny. Výstupom je syntaktický analyzátor, ktorý skúma, či sú vygenerované tokeny v logickom poradí. Tento výstup je daný sémantickému analyzátoru. Predpokladajme, že existuje časť kódu ako p = q + r;
Tu p, q sú celé čísla, ale r je plavák. Pomocou sémantického analyzátora sa premenná c integer prevedie na float. Preto vykonáva sémantickú analýzu. Výstup sémantického analyzátora ide do generátora prechodného kódu. Vracia prechodný kód, ktorý potom prejde do optimalizátora kódu. Optimalizácia kódu je proces eliminácie nepodstatných príkazov programu bez zmeny významu skutočného zdrojového kódu. Nie je to povinná optimalizácia, ale môže to zlepšiť čas behu cieľového kódu. Výstup optimalizátora kódu je daný generátoru kódu a nakoniec je zostavený cieľový kód.
Obrázok 01: Fázy kompilátora
Pri optimalizácii kódu závislého na stroji sa optimalizácia použije na zdrojový kód. Pridelenie dostatočného množstva zdrojov môže zlepšiť vykonávanie programu pri tejto optimalizácii.
Keď sa optimalizácia vykonáva na pomocnom kóde, nazýva sa to optimalizácia kódu nezávislá od stroja. Existujú rôzne techniky na dosiahnutie optimalizácie kódu nezávislého od stroja. Sú opísané pomocou nasledujúcich príkladov.
Prečítajte si nasledujúce riadky kódu.
pre (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Podľa vyššie uvedeného kódu sa b = x + 2 počíta znovu a znovu v každej iterácii. Akonáhle je b vypočítaná, nemení sa. Túto čiaru teda môžete umiestniť mimo slučku nasledovne.
b = x + 2;
pre (j = 0; j< 10; j++)
a [j] = 5 * j;
Toto sa nazýva pohyb kódu.
Prečítajte si nasledujúce riadky kódu.
J = 5;
ak (j == 10)
a = b + 20;
Podľa vyššie uvedeného kódu „if block“ sa nikdy nespustí, pretože hodnota j sa nikdy nebude rovnať 10. Je už inicializovaná na hodnotu 5. Preto, ak je blok možné odstrániť. Táto technika eliminuje mŕtve kódy.
Inou metódou je zníženie pevnosti. Aritmetické operácie ako násobenie vyžadujú viac pamäte, času a cyklov CPU. Tieto drahé výrazy môžu byť nahradené lacnými výrazmi ako b = a * 2; alebo môže byť nahradený pridaním, b = a + a;
Pozrite si nasledujúci kód.
pre (j = 1; j <= 5; j ++)
hodnota = j * 5;
Namiesto násobenia sa kód môže zmeniť nasledovne.
int temp = 5;
pre (j = 1; j<=5; j++)
temp = temp + 5;
value = temp;
Je možné vyhodnotiť výrazy, ktoré sú za behu konštantné. To sa nazýva konštantné skladanie. Môžu sa uviesť napríklad b [j + 1] = c [j + 1];
Namiesto toho sa môže zmeniť nasledovne.
n = j +1;
b [n] = c [n];
Môžu existovať slučky nasledovne.
pre (j = 0; j<5; j++)
printf ( "\ n");
pre (j = 0; j <5; j++)
printf ( "b \ n");
Pri tlači aab má rovnaký počet iterácií. Obe môžu byť kombinované do jednej pre slučku nasledovne.
pre (j = 0; j <5; j++)
printf („a \ n“);
printf ( "b \ n");
Ďalšou dôležitou technikou je internet Bežné odstránenie výrazov. Pri výpočte je potrebné nahradiť rovnaké výrazy jednou premennou. Pozrite si nasledujúci kód.
a = b * c + k;
d = b * c + m;
Tento kód možno previesť nasledujúcim spôsobom.
temp = b * c;
a = temp + k;
d = teplota + m;
Nie je potrebné počítať b * c znovu a znovu. Vynásobená hodnota sa môže uložiť do premennej a znova použiť.
Optimalizácia kódu nezávislá na stroji a nezávislá na stroji | |
Na objektový kód sa použije optimalizácia kódu závislá od stroja. | Optimalizácia kódu nezávislého od stroja sa použije na prechodný kód. |
Zapojenie do hardvéru | |
Optimalizácia závislá od stroja zahŕňa registre CPU a odkazy na absolútnu pamäť. | Optimalizácia kódu nezávislá od stroja nezahŕňa registre CPU ani odkazy na absolútnu pamäť. |
Optimalizácia kódu pozostáva z dvoch optimalizačných techník, a to optimalizácie kódu závislého od stroja a nezávislého od stroja. Rozdiel medzi strojovo závislou a strojovo nezávislou optimalizáciou kódu spočíva v tom, že sa na objektový kód použije strojovo závislá optimalizácia, zatiaľ čo na pomocný kód sa použije strojovo nezávislá optimalizácia..
Môžete si stiahnuť verziu tohto článku vo formáte PDF a použiť ju na účely offline podľa citácie. Stiahnite si verziu PDF tu Rozdiel medzi závislosťou na stroji a optimalizáciou kódu nezávislou na stroji
1. „Dizajn prekladača | Optimalizácia kódu. “ GeeksforGeeks. K dispozícii tu
2.Point, Návody. „Návrh kompilátora - optimalizácia kódu.“ Www.tutorialspoint.com, Point of Tutorials, 15. 8. 2017. K dispozícii tu
3.Estudies4you. „JNTUH CSE Study Material.“ Rozdiel medzi optimalizáciou stroja a nezávislou optimalizáciou kódu. K dispozícii tu
1.'Compiler 'I, Surachit, (CC BY-SA 3.0) prostredníctvom Commons Wikimedia