A számítógépes programok a hardvereknek a feladatok elvégzéséhez adott utasítások. Ezeket a programokat többnyire magas szintű nyelven írják, és a számítógép nem érti ezt a nyelvet. Ezért egy fordítót használnak ezeknek az utasításoknak a konvertálására gépi kódra vagy célkódra. A célkód létrehozása több szakaszon megy keresztül. A kód optimalizálása az egyik. Két optimalizálási módszer létezik, például a géptől függő és a géptől független kód optimalizálás. Az kulcs különbség a gépfüggő és a géptől független kódoptimalizálás között az, hogy a gépfüggő optimalizálást alkalmaznak az objektumkódra, míg a gépfüggetlen kód optimalizálást az intermedier kódra.
1. Áttekintés és a legfontosabb különbség
2. Mi a gépfüggő kódoptimalizálás
3. Mi a gépfüggetlen kódoptimalizálás
4. hasonlóságok a gépfüggő és a géptől független kódoptimalizálás között
5. Összegzés összehasonlítása - Gépfüggő és gépfüggetlen kód optimalizálás táblázatos formában
6. Összegzés
Amikor a forráskódot objektumkódra vagy célkódra konvertálja, a fordító több fázison megy keresztül. Először a forráskódot a Lexical analizátornak kapják, amely tokeneket állít elő. Ezután a kimenetet a szintaxis-elemzőnek kapjuk, amely megvizsgálja, hogy a generált tokenek logikus sorrendben vannak-e. Ezt a kimenetet a szemantikai analizátornak adják. Tegyük fel, hogy van egy darab kód, mint p = q + r;
Itt p, q egész szám, de r úszó. A szemantikai analizátor segítségével a c egész számváltozót átalakítják úszóvá. Ezért elvégzi a szemantikai elemzést. A szemantikus analizátor kimenete a közbenső kódgenerátorra megy. Egy közbenső kódot ad vissza, amelyet a kódoptimalizálóhoz küld. A kódoptimalizálás a nem alapvető programnyilatkozatok kiküszöbölése a tényleges forráskód jelentésének megváltoztatása nélkül. Ez nem kötelező optimalizálás, de javíthatja a célkód futási idejét. A kódoptimalizáló kimenete a kódgenerátornak adódik, és végül a célkód épül.
01. ábra: A fordító fázisai
A gépfüggő kód optimalizálásánál az optimalizálást a forráskódra alkalmazzák. Elegendő erőforrás-allokáció javíthatja a program végrehajtását ebben az optimalizálásban.
Amikor a közbenső kód optimalizálása megtörténik, azt géptől független kódoptimalizációnak nevezzük. Különböző technikák léteznek a géptől független kódoptimalizálás eléréséhez. A következő példákkal írják le őket.
Olvassa el az alábbiakban szereplő kódsorokat.
for (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
A fenti kód szerint b = x + 2-t újra és újra kiszámoljuk minden iterációban. Amint b kiszámításra kerül, nem változik. Tehát ez a vonal az alábbiak szerint helyezhető el a hurkon kívül.
b = x + 2;
for (j = 0; j< 10; j++)
a [j] = 5 * j;
Ezt hívják kódmozgásnak.
Olvassa el az alábbiakban szereplő kódsorokat.
J = 5;
if (j == 10)
a = b + 20;
A fenti kód szerint az 'if block' soha nem fog végrehajtódni, mert j értéke soha nem lesz 10-nél. Ez már inicializálva van az 5-ös értékre. Ezért ez a blokk eltávolítható. Ez a technika holt kód kiküszöbölése.
Egy másik módszer az erő csökkentése. A számtani műveletek, például a szorzás, több memóriát, időt és CPU-ciklust igényelnek. Ezek a drága kifejezések helyettesíthetők olcsó kifejezésekkel, például b = a * 2; vagy helyettesíthető hozzáadással, b = a + a;
Lásd az alábbi kódot.
for (j = 1; j <= 5; j ++)
érték = j * 5;
A szorzás helyett a kód a következőképpen változtatható meg.
int temp = 5;
for (j = 1; j<=5; j++)
temp = temp + 5;
érték = temp;
Ki lehet értékelni azokat a kifejezéseket, amelyek futó időben állandóak. Ez az úgynevezett állandó hajtogatás. Megállapíthatók például b [j + 1] = c [j + 1];
Ehelyett az alábbiak szerint változtatható meg.
n = j +1;
b [n] = c [n];
Hurkok lehetnek az alábbiak szerint.
for (j = 0; j<5; j++)
printf ( „\ n”);
for (j = 0; j <5; j++)
printf ( „b \ n”);
Az a és b nyomtatáskor mindkettő azonos számú iterációval rendelkezik. Mindkettőt az alábbiak szerint kombinálhatjuk hurokként.
for (j = 0; j <5; j++)
printf (“a \ n”);
printf ( „b \ n”);
Egy másik fontos technika a Közös al-kifejezés elimináció. A számítás elvégzéséhez az azonos kifejezéseket egyetlen változóval kell felváltani. Lásd az alábbiakódot.
a = b * c + k;
d = b * c + m;
Ez a kód az alábbiak szerint konvertálható.
temp = b * c;
a = temp + k;
d = temp + m;
Nem kell újra és újra kiszámítani a b * c értéket. A szorzott értéket egy változóban tárolhatjuk és újra felhasználhatjuk.
Gépfüggő és gépről független kódoptimalizálás | |
Gépfüggő kódoptimalizálás történik az objektumkódra. | Gépfüggetlen kódoptimalizálás történik a közbenső kódhoz. |
Bevonás a hardverbe | |
Géptől függő optimalizálás magában foglalja a CPU regisztereket és az abszolút memória hivatkozásokat. | A gépfüggetlen kódoptimalizálás nem foglalja magában a CPU regisztereket vagy az abszolút memória hivatkozásokat. |
A kód optimalizálása két optimalizálási technikából áll, nevezetesen a géptől függő és a géptől független kód optimalizálásból. A géptől függő és a géptől független kód optimalizálás között az a különbség, hogy a géptől függő optimalizálást az objektumkódra alkalmazzák, míg a géptől független kód optimalizálást a közbenső kódra alkalmazzák.
Letöltheti e cikk PDF verzióját, és offline célokra felhasználhatja, az idézet megjegyzésének megfelelően. Töltse le itt a PDF verziót. Különbség a géptől függő és a géptől független kódoptimalizálás között
1. „Compiler Design | Kód optimalizálás. ” GeeksforGeeks. Itt érhető el
2.Pont, oktatóanyagok. “Compiler Design - Kódoptimalizálás.” Www.tutorialspoint.com, Tutorials Point, 2017. augusztus 15. Elérhető itt
3.Estudies4you. “JNTUH CSE tananyag.” Különbség a gépfüggő és a független kódoptimalizálás között. Itt érhető el
1. 'Kompilátor' Írta: I, Surachit (CC BY-SA 3.0) a Commons Wikimedia segítségével