Código redundante

En programación, se conoce como código redundante a cualquier parte del código fuente que tenga algún tipo de redundancia tales como recalcular un valor que ha sido calculado previamente y todavía está disponible.[1]

Una instrucción NOP podría ser considerado como código redundante que ha sido explícitamente insertado para rellenar el flujo de instrucciones o introducir un retardo de tiempo, por ejemplo para crear un bucle de temporización para "perder el tiempo". Los identificadores que se declaran, pero nunca se les hace referencia, se denominan declaraciones redundantes.

Ejemplos

int foo(int X) {
    int Y = X*2;
    return X*2;
}

En este ejemplo la instrucción int Y = X*2; puede ser eliminada para evitar calcular el valor dos veces, o también se puede retornar el valor de la variable Y (aunque particularmente este método consume más memoria).

Considerando:

#define min(A,B) ((A)<(B)?(A):(B))

int magnitud_mas_corta(int u1, int v1, int u2, int v2)
{
    /* retorna la magnitud mas corta entre (u1,v1) y (u2,v2) */
    return sqrt(min(u1*u1 + v1*v1, u2*u2 + v2*v2));
}

Como consecuencia de usar el preprocesador de C el compilador escribirá la forma expandida:

int magnitud_mas_corta(int u1, int v1, int u2, int v2)
{
    int temp;
    if (u1*u1 + v1*v1 < u2*u2 + v2*v2)
        temp = u1*u1 + v1*v1; /* Redundante */
    else
        temp = u2*u2 + v2*v2; /* Redundante */
    return sqrt(temp);
}

Provocando un código totalmente redundante e ineficiente, sin embargo debido a que los macros de máximo y mínimo son muy utilizados los compiladores modernos detectan estas situaciones y corrigen el código generado.

Eliminación

Existen técnicas de optimización de software comúnmente llevadas a cabo por un compilador optimizador para eliminar el código redundante del código fuente. La más común es la eliminación de código muerto.

Véase también

Referencias