stringtranslate.com

Избыточный код

В компьютерном программировании избыточный код — это исходный код или скомпилированный код в компьютерной программе , который не нужен, например:

Инструкция NOP может считаться избыточным кодом, который был явно вставлен для заполнения потока инструкций или введения временной задержки, например, для создания цикла синхронизации путем "траты времени". Идентификаторы , которые объявлены, но никогда не упоминаются, называются избыточными объявлениями .

Примеры

Следующие примеры написаны на языке C.

int foo ( int iX ) { int iY = iX * 2 ;       вернуть iX * 2 ; } 

Второе iX*2выражение является избыточным кодом и может быть заменено ссылкой на переменную iY. В качестве альтернативы определение int iY = iX*2может быть удалено.

Учитывать:

#define min(A,B) ((A)<(B)?(A):(B))int shorter_magnitude ( int u1 , int v1 , int u2 , int v2 ) { /* Возвращает меньшую величину (u1,v1) и (u2,v2) */ return sqrt ( min ( u1 * u1 + v1 * v1 , u2 * u2 + v2 * v2 )); }                

В результате использования препроцессора C компилятор увидит только развернутую форму:

int shorter_magnitude ( int u1 , int v1 , int u2 , int v2 ) { int temp ; if ( u1 * u1 + v1 * v1 < u2 * u2 + v2 * v2 ) temp = u1 * u1 + v1 * v1 ; /* Избыточное значение уже рассчитано для сравнения */ else temp = u2 * u2 + v2 * v2 ; /* Избыточное значение уже рассчитано для сравнения */ return sqrt ( temp ); }                                 

Поскольку использование макросов min/max очень распространено, современные компиляторы запрограммированы на распознавание и устранение избыточности, вызванной их использованием.

Однако в следующем коде нет избыточности:

#define max(A,B) ((A)>(B)?(A):(B))int random ( int cutoff , int range ) { return max ( cutoff , rand () % range ); }       

Если первоначальный вызов rand(), modulo range, больше или равен cutoff, rand() будет вызван второй раз для второго вычисления rand()%range, что может привести к значению, которое на самом деле меньше cutoff. Таким образом, макрос max может не обеспечить предполагаемое поведение для этой функции.

Смотрите также

Ссылки

  1. ^ Дебрей, СК, Эванс, В., Мут, Р. и Де Саттер, Б. 2000. Методы компиляции для уплотнения кода. ACM Trans. Program. Lang. Syst. 22, 2 (март 2000), 378–415.