Fő különbség - Gépfüggő és Gépfüggetlen Kódoptimalizálás
A számítógépes programok a hardvereknek adott feladatsorokhoz adott utasítások. Ezeket a programokat többnyire magas szintű nyelveken írják, és a számítógép nem érti ezt a nyelvet. Ezért egy fordító segítségével átalakítják ezeket az utasításokat gépi kódokká vagy célkódokká. Több szakaszon megy keresztül a célkód összeállítása. A kódoptimalizálás az egyik ilyen. Két optimalizálási technika létezik, például: gépfüggő és gépfüggetlen kódoptimalizálás. A gépfüggő és a gépfüggetlen kódoptimalizálás közötti legfontosabb különbség az, hogy a gépfüggő optimalizálást az objektumkódra, míg a gépfüggetlen kódoptimalizálást a köztes kódra alkalmazzák.
TARTALOM
1. Áttekintés és kulcsfontosságú különbségek
2. Mi a gépfüggő kódoptimalizálás
3. Mi a gépfüggetlen kódoptimalizálás
4. A gépfüggetlen és a gépfüggetlen kódoptimalizálás közötti hasonlóság
5. Egymás melletti összehasonlítás - Gépfüggő és a géptől független kódoptimalizálás táblázatos formában
6. Összefoglalás
Mi a gépfüggő kódoptimalizálás?
A forráskód objektumkóddá vagy célkóddá történő átalakításakor a fordító több fázison megy keresztül. Először a forráskódot kapja a Lexical analizátor, amely tokeneket állít elő. Ezután a kimenetet a szintaxis analizátor kapja, amely megvizsgálja, hogy a létrehozott tokenek logikai sorrendben vannak-e. Ezt a kimenetet a szemantikai elemző kapja meg. Tegyük fel, hogy van egy kódrészlet p = q + r;
Itt p, q egész szám, de r úszó. A szemantikai elemző segítségével a c egész változót úszóvá alakítjuk. Ezért elvégzi a szemantikai elemzést. A szemantikus analizátor kimenete az Intermediate kódgenerátorhoz kerül. Visszaad egy köztes kódot, amely a kódoptimalizálóhoz kerül. A kódoptimalizálás az a folyamat, amely kiküszöböli a nem alapvető program utasításokat anélkül, hogy megváltoztatná a tényleges forráskód jelentését. Ez nem kötelező optimalizálás, de javíthatja a célkód futási idejét. A kódoptimalizáló kimenetét a kódgenerátor kapja meg, végül elkészül a célkód.
01. ábra: A fordító fázisai
A gépfüggő kódoptimalizálás során az optimalizálást a forráskódra alkalmazzák. Elegendő erőforrás elosztása javíthatja a program végrehajtását ebben az optimalizálásban.
Mi a gépfüggetlen kódoptimalizálás?
Ha az optimalizálás a köztes kódon történik, akkor azt gépfüggetlen kódoptimalizálásnak nevezzük. Különböző technikák léteznek a gépfüggetlen kódoptimalizálás elérésére. Ezeket a következő példák segítségével írjuk le.
Olvassa el a kódsorokat.
mert (j = 0; j <10; j ++) {
b = x + 2;
a [j] = 5 * j;
}
A fenti kód szerint b = x + 2-t minden egyes iterációban újra és újra kiszámolunk. A b kiszámítása után ez nem változik. Tehát ez a vonal az alábbiak szerint helyezhető el a hurkon kívül.
b = x + 2;
mert (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Ezt hívjuk kódmozgásnak.
Olvassa el a kódsorokat.
j = 5;
ha (j == 10) {
a = b + 20;
}
A fenti kód szerint az „if block” soha nem fog végrehajtódni, mert a j értéke soha nem lesz egyenlő 10-vel. Ez már inicializálva van az 5. értékre. Ezért ez a blokk eltávolítható. Ez a technika a holt kód megszüntetése.
Egy másik módszer az erősség csökkentése. Az olyan számtani műveletek, mint a szorzás, több memóriát, időt és CPU-ciklust igényelnek. Ezeket a drága kifejezéseket olyan olcsó kifejezésekkel lehet helyettesíteni, mint b = a * 2; vagy helyettesíthető hozzáadással, b = a + a;
Lásd az alábbi kódot.
(j = 1; j <= 5; j ++) {
érték = j * 5;
}
A szorzás helyett a kód az alábbiak szerint változtatható meg.
int temp = 5;
(j = 1; j <= 5; j ++) {
temp = temp + 5;
érték = hőmérséklet;
}
Ki lehet értékelni azokat a kifejezéseket, amelyek futás közben állandóak. Állandó hajtogatásnak hívják. Megállapíthatjuk például, hogy b [j + 1] = c [j + 1];
Ehelyett a következőképpen változtatható meg.
n = j +1;
b [n] = c [n];
A következők szerint lehetnek hurkok.
mert (j = 0; j <5; j ++) {
printf („a / n”);
}
mert (j = 0; j <5; j ++) {
printf („b / n”);
}
Az a és b nyomtatásakor mindkettő azonos számú iterációt tartalmaz. Mindkettő a következőképpen kombinálható egy ciklushoz.
mert (j = 0; j <5; j ++) {
printf („a / n”);
printf („b / n”);
}
Egy másik fontos technika a Common sub expresszió elimináció. A számítás elvégzéséhez az azonos kifejezéseket egyetlen változóval kell felváltani. Olvassa el az alacsonyabb kódot.
a = b * c + k;
d = b * c + m;
Ezt a kódot az alábbiak szerint lehet átalakítani.
temp = b * c;
a = hőmérséklet + k;
d = hőmérséklet + m;
Nem szükséges újra és újra kiszámítani a b * c értéket. A megszorzott érték tárolható egy változóban, és újra felhasználható.
Mi a hasonlóság a gépfüggő és a gépfüggetlen kódoptimalizálás között?
Mindkettő a kódoptimalizáláshoz tartozik
Mi a különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között?
Különböző cikk a táblázat előtt
Gépfüggő és gépfüggetlen kódoptimalizálás |
|
Gépfüggő kódoptimalizálást alkalmaznak az objektumkódra. | Gépfüggetlen kódoptimalizálást alkalmaznak a köztes kódra. |
Bevonás a hardverbe | |
A gépfüggő optimalizálás CPU regisztereket és abszolút memória hivatkozásokat tartalmaz. | A gépfüggetlen kódoptimalizálás nem tartalmaz CPU regisztereket vagy abszolút memória hivatkozásokat. |
Összegzés - Gépfüggő és Gépfüggetlen Kódoptimalizálás
A kódoptimalizálás két optimalizálási technikából áll, nevezetesen gépfüggő és gépfüggetlen kódoptimalizálásból. A gépfüggő és a gépfüggetlen kódoptimalizálás közötti különbség az, hogy a gépfüggő optimalizálást az objektumkódra, míg a gépfüggetlen kódoptimalizálást a köztes kódra alkalmazzák.
Töltse le a Gépfüggő vs Gépfüggetlen Kódoptimalizálás PDF-verzióját
A cikk PDF-verzióját letöltheti, és offline célokra is használhatja, az idézési megjegyzés szerint. Kérjük, töltse le itt a PDF verziót. Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között