Компютърните програми са набор от инструкции, дадени на хардуера, за изпълнение на задачи. Тези програми са написани най-вече на езици от високо ниво и компютърът не разбира този език. Следователно, компилатор се използва за преобразуване на тези инструкции в машинен код или целеви код. Той преминава през няколко фази за изграждане на целевия код. Оптимизацията на кодове е един от тях. Има две техники за оптимизация като машинно зависима и машинна независима оптимизация на кода. Най- ключова разлика между машинно зависимата и машинно независимата оптимизация на кода е, че машинно зависимата оптимизация се прилага към обектния код, докато машинната независима оптимизация на кода се прилага към междинния код.
1. Преглед и ключова разлика
2. Какво е машинно зависимата оптимизация на кода
3. Какво е машинно независима оптимизация на кодове
4. Прилики между машинно зависимата и машинно независимата оптимизация на кода
5. Паралелно сравнение - машинно зависима от машината независима оптимизация на код в таблична форма
6. Резюме
Когато конвертирате изходния код в обектния код или целевия код, компилаторът преминава през няколко фази. Първо, изходният код се дава на Lexical анализатор, който произвежда маркери. След това изходът се дава на синтаксисен анализатор, който изследва дали генерираните маркери са в логичен ред. Този изход се дава на семантичния анализатор. Да приемем, че има парче код като p = q + r;
Тук p, q са цели числа, но r е плувка. С помощта на семантичния анализатор променливата c цяло число се преобразува в плаваща. Затова прави семантичното анализиране. Изходът на семантичния анализатор отива в генератора на междинен код. Той връща междинен код, който след това отива в оптимизатора на кода. Оптимизацията на кода е процесът на елиминиране на несъществените програмни изявления без промяна на значението на действителния изходен код. Това не е задължително оптимизиране, но може да подобри времето на работа на целевия код. Изходът на оптимизатора на кода се дава на генератора на кодове и накрая се изгражда целевия код.
Фигура 01: Фази на компилатора
В машинно зависимата оптимизация на кода, оптимизацията се прилага към изходния код. Разпределянето на достатъчно количество ресурси може да подобри изпълнението на програмата при тази оптимизация.
Когато се извършва оптимизация на междинния код, той се нарича машинно независима оптимизация на кода. Има различни техники за постигане на машинна независима оптимизация на кода. Те са описани като се използват следните примери.
Прочетете кодовете по-долу.
за (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Според горния код, b = x + 2 се изчислява отново и отново във всяка итерация. След като b се изчисли, той не се променя. Така че, тази линия може да бъде поставена извън контура, както следва.
b = x + 2;
за (j = 0; j< 10; j++)
a [j] = 5 * j;
Това се нарича движение на код.
Прочетете кодовете по-долу.
J = 5;
ако (j == 10)
a = b + 20;
Съгласно горния код 'if block' никога няма да се изпълни, защото j стойността никога няма да е равна на 10. Тя вече е инициализирана до стойността 5. Следователно това, ако блокът може да бъде премахнат. Тази техника е елиминиране на мъртъв код.
Друг метод е намаляване на здравината. Аритметичните операции като умножение изискват повече памет, време и цикли на процесора. Тези скъпи изрази могат да бъдат заменени с евтини изрази като b = a * 2; или може да бъде заменен с добавяне, b = a + a;
Вижте кода по-долу.
за (j = 1; j <= 5; j ++)
стойност = j * 5;
Вместо умножението, кодът може да бъде променен, както следва.
int temp = 5;
за (j = 1; j<=5; j++)
temp = temp + 5;
стойност = темп;
Възможно е да се оценят изразите, които са константи по време на изпълнение. Нарича се постоянно сгъване. Може да се заяви като b [j + 1] = c [j + 1];
Вместо това може да се промени по следния начин.
n = j +1;
b [n] = c [n];
Може да има бримки, както следва.
за (j = 0; j<5; j++)
ФОРМАТ ( "а \ п");
за (j = 0; j <5; j++)
ФОРМАТ ( "б \ п");
При отпечатване на a и b и двете имат еднакъв брой повторения. И двете могат да бъдат комбинирани към един за контур, както следва.
за (j = 0; j <5; j++)
printf („a \ n“);
ФОРМАТ ( "б \ п");
Друга важна техника е Често елиминиране на суб-изрази. Това е да се заменят идентичните изрази с една променлива, за да се направи изчислението. Обърнете се към следващия код.
a = b * c + k;
d = b * c + m;
Този код може да бъде преобразуван по следния начин.
temp = b * c;
a = temp + k;
d = темп + m;
Не е необходимо да се изчислява b * c отново и отново. Умножената стойност може да се съхранява в променлива и да се използва повторно.
Зависима от машината спрямо независимото оптимизиране на кода на машината | |
За обектния код се прилага машинно зависима оптимизация на кода. | За междинен код се прилага машинно независима оптимизация на кода. |
Участие с хардуер | |
Машинозависимата оптимизация включва процесорни регистри и абсолютни препратки към памет. | Независимата от машината кодова оптимизация не включва регистри на процесора или абсолютни препратки към паметта. |
Оптимизацията на кода се състои от две техники за оптимизация, а именно машинно зависима и машинна независима оптимизация на кода. Разликата между машинно зависимата и машинно независимата оптимизация на кода е, че машинно зависимата оптимизация се прилага към обектния код, докато машинната независима оптимизация на кода се прилага към междинен код.
Можете да изтеглите PDF версия на тази статия и да я използвате за офлайн цели, съгласно цитираната бележка. Моля, изтеглете PDF версия тук Разлика между машинно зависимата и машинната независима оптимизация на кода
1. „Дизайн на компилатор | Оптимизация на кода. " GeeksforGeeks. Налични тук
2. Точка, уроци. „Дизайн на компилатор - оптимизация на код.“ Www.tutorialspoint.com, Tutorials Point, 15 август 2017. Достъпно тук
3.Estudies4you. „Учебен материал JNTUH CSE.“ Разлика между машинно зависимата и независимата оптимизация на кода. Налични тук
1. 'Compiler' от I, Surachit, (CC BY-SA 3.0) през Wikimedia на Commons