Hola chicos se me ha ocurrido la idea de: ¿Que tal un post donde estén trucos y tips para mejorar la eficiencia?. Esto debido a que c genera mucho código innecesario y mi lema es "Es mejor un C eficiente y ordenado, que un ASM deficiente e incompresible".
Así que, ¿que truco conocen para ahorrar memoria y ser mas eficiente?
Comienzo yo
:
CASO 1:
En vez de:
variable = variable * (2 o 4 o 8 o 16)
usar:
variable = variable << (1 o 2 o 3 o 4 respectivamente)
En vez de:
variable = variable / (2 o 4 o 8 o 16)
usar:
variable = variable >> (1 o 2 o 3 o 4 respectivamente)
CASO 2:
Si tienes una estructura con muchas variables ni se te ocurra pasarla como parámetro (yo tenia una con 12 variables) y cada vez que llamaba a la función pasándole la estructura era un 1% menos de memoria ROM, es mejor declarar de manera global (No se mucho de ASM pero creo que esto es debido a que coloca cada variable en la pila antes de llamar la función).
CASO 3:
y por ejemplo yo tenia que hacer una comprobación si era TRUE mostrar " "(espacio) y si era FALSE mostrar la "B"
en vez de
use:
Si se dan cuenta uso un circunflejo este es el operador XOR en binario la:
01000010 = 66 (que en ascii es "B")
y
00100000 = 32 (que en ascii es " ")
si le aplico un xor con el numero 98
01100010 = 98
01000010 = 66
desde la izquierda tomando el binario de 66 y 98:
0 y 0 = 0
1 y 1 = 0
0 y 1 = 1
0 y 0 = 0
0 y 0 = 0
0 y 0 = 0
1 y 1 = 0
0 y 0 = 0
Sip es lo que ustedes piensan da 00100000 que es igual a 32 y si le aplican de nuevo se invierte.
Si ven es mas eficiente genera menos codigo yo ahorre un 0.2% de espacio (si se que no es mucho) pero si les falta un poco pueden aplica mini optimizaciones como esta y escribir lo demas en C y no usar la dificultad de asm.
Espero que les haya gustado (y me hayan entendido) espero sus consejos y trucos
.
Como extra les dejo esta pagina que contiene mas sobre formas de optimizar http://www.ual.es/~jjfdez/IC/Practicas/optim.html.
Por cierto no estoy seguro si colocarlo aquí o en interfaz y programación xd
Así que, ¿que truco conocen para ahorrar memoria y ser mas eficiente?
Comienzo yo
CASO 1:
En vez de:
variable = variable * (2 o 4 o 8 o 16)
usar:
variable = variable << (1 o 2 o 3 o 4 respectivamente)
En vez de:
variable = variable / (2 o 4 o 8 o 16)
usar:
variable = variable >> (1 o 2 o 3 o 4 respectivamente)
CASO 2:
Si tienes una estructura con muchas variables ni se te ocurra pasarla como parámetro (yo tenia una con 12 variables) y cada vez que llamaba a la función pasándole la estructura era un 1% menos de memoria ROM, es mejor declarar de manera global (No se mucho de ASM pero creo que esto es debido a que coloca cada variable en la pila antes de llamar la función).
CASO 3:
y por ejemplo yo tenia que hacer una comprobación si era TRUE mostrar " "(espacio) y si era FALSE mostrar la "B"
en vez de
Código:
int1 esModificable = TRUE;
if(esModificable == TRUE){
[INDENT]esModificable = FALSE;
lcd_putc("B");[/INDENT]
}else{
[INDENT]esModificable = TRUE;
lcd_putc(" ");[/INDENT]
}
Código:
int8 esModificable = ' ';
isModificable = isModificable ^ 98; // Cambia entre el caracter " " y el "B" para evitar if.
lcd_putc(isModificable);
01000010 = 66 (que en ascii es "B")
y
00100000 = 32 (que en ascii es " ")
si le aplico un xor con el numero 98
01100010 = 98
01000010 = 66
desde la izquierda tomando el binario de 66 y 98:
0 y 0 = 0
1 y 1 = 0
0 y 1 = 1
0 y 0 = 0
0 y 0 = 0
0 y 0 = 0
1 y 1 = 0
0 y 0 = 0
Sip es lo que ustedes piensan da 00100000 que es igual a 32 y si le aplican de nuevo se invierte.
Si ven es mas eficiente genera menos codigo yo ahorre un 0.2% de espacio (si se que no es mucho) pero si les falta un poco pueden aplica mini optimizaciones como esta y escribir lo demas en C y no usar la dificultad de asm.
Espero que les haya gustado (y me hayan entendido) espero sus consejos y trucos
Como extra les dejo esta pagina que contiene mas sobre formas de optimizar http://www.ual.es/~jjfdez/IC/Practicas/optim.html.
Por cierto no estoy seguro si colocarlo aquí o en interfaz y programación xd
Última edición: