Diferencia entre revisiones de «Código redundante»
m bot: -esta disponible +está disponible |
|||
Línea 1: | Línea 1: | ||
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 |
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.<ref>[http://doi.acm.org/10.1145/349214.349233 Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378–415.]</ref> |
||
Una instrucción [[NOP]] podría ser considerado como código redundante que ha sido explícitamente insertado para rellenar el flujo de [[Instrucción informática|instrucciones]] o introducir un retardo de tiempo, por ejemplo para crear un bucle de temporización para "perder el tiempo". Los [[identificador]]es que se declaran, pero nunca se les hace referencia, se denominan '''declaraciones redundantes'''. |
Una instrucción [[NOP]] podría ser considerado como código redundante que ha sido explícitamente insertado para rellenar el flujo de [[Instrucción informática|instrucciones]] o introducir un retardo de tiempo, por ejemplo para crear un bucle de temporización para "perder el tiempo". Los [[identificador]]es que se declaran, pero nunca se les hace referencia, se denominan '''declaraciones redundantes'''. |
Revisión del 09:31 24 sep 2017
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 removida 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 mas 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.