Para el punto 3 anterior, dentro de la respuesta de Dathan, otra forma de intercambio, puede intercambiar variables de forma no convencional utilizando xor.
int = 3, y = 4;
x = x^y;
y = y^x;
x = x^y;
Ahora xyy se intercambian! :)
Otra cosa, cuando se divide algo con 2, es mejor usar el operador de cambio a la derecha. Lo mismo podría decirse para multiplicar por 2, desplazar a la izquierda.
En el antiguo compilador de Borland C, había una propiedad _stklen
que puede asignar para reducir el tamaño y el código de la pila. No he visto nada de eso hoy en día ya que la tecnología compiladora ha avanzado desde entonces.
Al usar malloc, sería mejor utilizar calllo en cambio, ya que inicializa la memoria a cero.
El uso del operador ternario en lugar de la instrucción if/else es aparentemente más rápido, supongo que los escritores de compiladores se han vuelto más inteligentes con respecto a la generación de código de máquina. Simplemente no puedo proporcionar una prueba de eso en ese sentido, pero se mantuvo cierto en aquel entonces cuando Borland C 3.01 gobernó el gallinero.
Código de alineación con rutinas de ensamblaje.
Me gusta este tema de la pregunta ya que me recuerda los viejos tiempos cuando la memoria era preciosa y tener que exprimir una pinta en un recipiente de cuarto de galón y utilizar los trucos de hocus pocus del código x86. Gracias por publicar esta pregunta Mr.Database.
Tenga cuidado, Tom.
No hay pruebas de que ir en contra del lenguaje y para qué están "optimizados" los compiladores le dará un impulso en el rendimiento. – AraK
¿Desde cuándo mejorar los algoritmos, perfilar antes de optimizar, etc. es razonable? Si eso fuera cierto, no tendríamos que trabajar tan duro para convencer a la gente de hacer estas cosas. – jason
He votado para volver a abrir. Me hubiera gustado agregar una respuesta, a saber, este enlace: http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773 –