Разница между машинно-зависимой и машинно-независимой оптимизацией кода

Оглавление:

Разница между машинно-зависимой и машинно-независимой оптимизацией кода
Разница между машинно-зависимой и машинно-независимой оптимизацией кода

Видео: Разница между машинно-зависимой и машинно-независимой оптимизацией кода

Видео: Разница между машинно-зависимой и машинно-независимой оптимизацией кода
Видео: Настя и сборник весёлых историй 2024, Ноябрь
Anonim

Ключевое различие - машинно-зависимая и машинно-независимая оптимизация кода

Компьютерные программы - это наборы инструкций, данных аппаратному обеспечению для выполнения задач. Эти программы в основном написаны на языках высокого уровня, и компьютер не понимает этот язык. Поэтому для преобразования этих инструкций в машинный код или целевой код используется компилятор. Построение целевого кода проходит через несколько этапов. Оптимизация кода - одна из них. Существует два метода оптимизации: машинно-зависимая и машинно-независимая оптимизация кода. Ключевое различие между машинно-зависимой и машинно-независимой оптимизацией кода заключается в том, что машинно-зависимая оптимизация применяется к объектному коду, а машинно-независимая оптимизация кода применяется к промежуточному коду.

СОДЕРЖАНИЕ

1. Обзор и ключевые различия

2. Что такое машинно-зависимая оптимизация кода

3. Что такое машинно-независимая оптимизация кода

4. Сходства между машинно-зависимой и машинно-независимой оптимизацией кода

5. Параллельное сравнение - машинно-зависимая и машинно-независимая оптимизация кода в табличной форме

6. Резюме

Что такое машинно-зависимая оптимизация кода?

При преобразовании исходного кода в объектный код или целевой код компилятор проходит несколько этапов. Сначала исходный код передается лексическому анализатору, который производит токены. Затем результат передается синтаксическому анализатору, который проверяет, находятся ли сгенерированные токены в логическом порядке. Этот вывод передается семантическому анализатору. Предположим, что существует фрагмент кода p = q + r;

Здесь p, q - целые числа, но r - число с плавающей запятой. С помощью семантического анализатора целочисленная переменная c преобразуется в число с плавающей запятой. Следовательно, он выполняет семантический анализ. Выход семантического анализатора поступает в генератор промежуточного кода. Он возвращает промежуточный код, который затем передается оптимизатору кода. Оптимизация кода - это процесс исключения несущественных программных операторов без изменения смысла фактического исходного кода. Это не обязательная оптимизация, но она может улучшить время работы целевого кода. Выходные данные оптимизатора кода передаются генератору кода, и, наконец, создается целевой код.

Разница между машинно-зависимой и машинно-независимой оптимизацией кода
Разница между машинно-зависимой и машинно-независимой оптимизацией кода

Рисунок 01: Этапы компилятора

В машинно-зависимой оптимизации кода оптимизация применяется к исходному коду. Выделение достаточного количества ресурсов может улучшить выполнение программы при этой оптимизации.

Что такое машинно-независимая оптимизация кода?

Оптимизация промежуточного кода называется машинно-независимой оптимизацией кода. Существуют различные методы достижения машинно-независимой оптимизации кода. Они описаны с помощью следующих примеров.

Прочтите следующие строки кода.

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

б = х + 2;

a [j] = 5 * j;

}

Согласно приведенному выше коду, b = x + 2 вычисляется снова и снова на каждой итерации. После вычисления b он не меняется. Итак, эту строку можно вывести за пределы цикла следующим образом.

б = х + 2;

для (j = 0; j <10; j ++)

{a [j] = 5 * j;

}

Это называется движением кода.

Прочтите следующие строки кода.

j = 5;

if (j == 10) {

а = b + 20;

}

Согласно приведенному выше коду, if block никогда не будет выполняться, потому что значение j никогда не будет равно 10. Он уже инициализирован значением 5. Следовательно, этот блок if может быть удален. Это метод устранения мертвого кода.

Другой метод - снижение силы. Арифметические операции, такие как умножение, требуют больше памяти, времени и циклов процессора. Эти дорогие выражения можно заменить дешевыми выражениями, такими как b = a * 2; или можно заменить сложением, b = a + a;

См. Приведенный ниже код.

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

значение = j * 5;

}

Вместо умножения код можно изменить следующим образом.

int temp = 5;

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

темп = темп + 5;

значение = темп;

}

Можно оценивать выражения, которые являются константами во время выполнения. Это называется постоянным сворачиванием. Можно указать, например, b [j + 1] = c [j + 1];

Вместо этого его можно изменить следующим образом.

n = j +1;

б [п] = с [п];

Петли могут быть следующие.

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

printf («а / п»);

}

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

printf («б / п»);

}

Печать a и b имеет одинаковое количество итераций. Оба могут быть объединены в один цикл for следующим образом.

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

printf («а / п»);

printf («б / п»);

}

Другой важный метод - исключение общих подвыражений. Это замена идентичных выражений одной переменной для выполнения вычислений. См. Приведенный ниже код.

а = Ь * с + к;

d = b * c + m;

Этот код можно преобразовать следующим образом.

темп = b * c;

а = темп + к;

d = температура + m;

Не требуется снова и снова рассчитывать b * c. Умноженное значение можно сохранить в переменной и использовать повторно.

В чем сходство между машинно-зависимой и машинно-независимой оптимизацией кода?

Оба они относятся к оптимизации кода

В чем разница между машинно-зависимой и машинно-независимой оптимизацией кода?

Различать статью в середине перед таблицей

Машинно-зависимая и машинно-независимая оптимизация кода

К объектному коду применяется машинно-зависимая оптимизация кода. Машинно-независимая оптимизация кода применяется к промежуточному коду.
Работа с оборудованием
Машинно-зависимая оптимизация включает регистры ЦП и абсолютные ссылки на память. Машинно-независимая оптимизация кода не включает регистры ЦП или абсолютные ссылки на память.

Резюме - машинно-зависимая и машинно-независимая оптимизация кода

Оптимизация кода состоит из двух методов оптимизации: машинно-зависимой и машинно-независимой оптимизации кода. Разница между машинно-зависимой и машинно-независимой оптимизацией кода заключается в том, что машинно-зависимая оптимизация применяется к объектному коду, тогда как машинно-независимая оптимизация кода применяется к промежуточному коду.

Скачать PDF-версию машинно-зависимой и машинно-независимой оптимизации кода

Вы можете загрузить PDF-версию этой статьи и использовать ее в автономных целях в соответствии с примечанием к цитированию. Пожалуйста, скачайте PDF-версию здесь. Разница между машинно-зависимой и машинно-независимой оптимизацией кода.

Рекомендуем: