Constantes y variables: ¿cuál es la diferencia real?

Parece obvio, pero algunos se escapa la sutil diferencia entre constantes y variables en un lenguaje de programación. Las constantes, desde el propio nombre, no cambian su valor durante el ciclo de un programa, mientras que las variables pueden hacerlo! A menudo, sin embargo, pasar a utilizar variables en lugar de constantes y sin darse cuenta, también porque no afecta a la lógica de una aplicación. A pesar de esto, la diferencia entre constantes y variables de allí y se nota todo el tiempo de compilación, donde la constante tiene un papel que sin duda más eficiente.

De la programación Asamblea o C Coming conoce la diferencia entre las constantes y variables, sobre todo porque, tanto en ensamblador y C, las constantes de jugar un papel por MACRO. Para MACRO indendo un "pedazo de código" que se etiqueta y se sustituye en el código en tiempo de compilación. El compilador, en fin, lleva a cabo una suerte de encontrar .. reemplazar (y es sostituitsci) en el código cada vez que encuentra una constante.

Imagínese que usted escribe en C el siguiente sencillo trozo de código:

1
2
3
4
5 ; int a = 5;
3 ; int b = 3;
int c;
b ; c = a + b;

sono indicate come variabili in questo caso. Tanto a que b se indican como variables en este caso. En C, de hecho, las constantes se definen con la palabra clave #define . sono state definite come int . Tomamos nota de inmediato que es a que b se define como int . Ya aquí se puede operar una primera optimización. Si sabemos que nuestra variable a no exceda de un determinado valor, es bueno para declarar de forma adecuada y no utilizar los tipos de datos de forma aleatoria. Algunos desarrolladores no se molestan para declarar los tipos correctos, pensando que esto no afecta performace! Wrong! Alternativamente, es aceptable que el primer borrador del código no implica este nivel de detalle. Sin embargo, es una buena regla, durante el proceso de desarrollo, revisar el código y comprobar los tipos de datos.
Sin embargo, en una asamblea de la familia Motorola, por ejemplo, como el mítico 68000, nuestro código se apoderaría compilado (no optimizar) en una especie de:

1
2
3
4
, d0 ; int a mover l # 5, d0;. int
, d1 ; int b moverse. l # 3, d1, int b
d2 ; int c - foo Mover L d1, d2, int c -. foo
l d0 , d2 ; risultato in d2 ovvero c agregar. l d0, d2, d2 o resultar en c

o:

1
2
3
, d0 ; int a mover l # 5, d0;. int
, d1 ; int b moverse. l # 3, d1, int b
d1 ; risultato in d1... moverse. l d0, d1, d1 resultado ...

El compilador, pero inteligente, la fatiga en las optimizaciones, a continuación, escribir el código con las palabras clave adecuadas sólo puede ayudar a mejorar la salida compilada. En nuestro caso, si el valor es una constante 5 no es conveniente utilizar una variable de número entero, desde el compilador, apropiadamente, mientras que la variable variable de, precisamente, predisponde en su conjunto para contener el valor sencillo de 5, que en binario es 101, es decir, tiene 3 simples bits (si algo int es un 32 o un peor 53bit doble precisión de punto flotante!). Si hubiéramos escrito el código de la siguiente manera:

1
2
3
4
5
# Definir MIA_COSTANTE 5

3 ; int b = 3;
int c;
b ; MIA_COSTANTE + c = b;

El compilador habría sabido desde el principio que MIA_COSTANTE , siendo constante, el valor no va a cambiar, así que puede reservar menos espacio para tratarla. En la práctica el código Asamblea diverebbe:

1
2
3
d0 ; la "q" indica una istruzione "quick", cioè che tratta valori compresi tra -128 e +127 moveq # 3, d0, la "q" indica una instrucción "rápida", es decir valores entre -128 y 127
, Una instrucción "rápida" en menos tiempo de CPU (4 ciclos de reloj en este caso)
d0 ; anche qui uso una istruzione "quick" addq # 5, d0, aquí también usar una instrucción "rápida"

Este código es muy rápido y ocupa menos bytes. Lo que tienes que tener en cuenta es que cuando se declara una variable de entorno está dispuesto a tratarlo como tal, a pesar de que los compiladores de hoy en día son capaces de hacer milagros, la realización de una serie de pasos en el código antes de compilar (algunos compiladores incluso llevar a cabo una especie de programa de simulación para optimizar la compilación en código máquina).

Una buena regla, por lo tanto, es declarar el tipo correcto de nuestras variables, ya sean. Alternativamente, puede utilizar las constantes, especialmente si el lenguaje de programación que estamos utilizando el esperado (como en el caso de la nueva Flash CS3).

No hay comentarios para este post

Deja un comentario

TAG XHTML PERMISOS: ENTRADA CÓDIGO:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL