Ayuda programación C [agilizar programa]

Iniciado por David8, 12 Mayo 2014, 15:55 PM

0 Miembros y 2 Visitantes están viendo este tema.

David8

Hola. La cuestión es que tengo un programa en el que hay una serie de funciones que son llamadas bastantes veces durante la ejecución de este(más de 20 cada una).
Lo que quería saber es si existe algún método para mejorar la velocidad del programa cuando se hacen muchas llamadas a una función.

Un saludo.

do-while

¡Buenas!

Si las funciones tienen poco código, puedes declarar macros que hagan el trabajo de las funciones. Si lo haces de esta forma, el preprocesador sustituirá las llamadas a las macros por el código que contienen y realmente no habrá ninguna llamada a ninguna función, sino que tendrás el código "incrustado" en el lugar de la llamada.

Si utilizas C++ y como antes las funciones tienen poco código, siempre puedes declarar las funciones inline, aunque en este caso dependerá del compilador la decisión de sustituir las llamadas por el código que contienen.

Otra opción, en el caso de que la función reciba structs, es pasar los parámetros por referencia (utilizando punteros), ahorras tiempo al no tener que escribir el struct completo en la pila...

Sin tu código no podemos darte mas indicaciones.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

David8

Cita de: do-while en 12 Mayo 2014, 16:03 PM
¡Buenas!

Si las funciones tienen poco código, puedes declarar macros que hagan el trabajo de las funciones. Si lo haces de esta forma, el preprocesador sustituirá las llamadas a las macros por el código que contienen y realmente no habrá ninguna llamada a ninguna función, sino que tendrás el código "incrustado" en el lugar de la llamada.

Si utilizas C++ y como antes las funciones tienen poco código, siempre puedes declarar las funciones inline, aunque en este caso dependerá del compilador la decisión de sustituir las llamadas por el código que contienen.

Otra opción, en el caso de que la función reciba structs, es pasar los parámetros por referencia (utilizando punteros), ahorras tiempo al no tener que escribir el struct completo en la pila...

Sin tu código no podemos darte mas indicaciones.

¡Saludos!
La función tiene una longitud aproximada de 200 líneas (no sé si eso es mucho o poco)
Uso C

Un saludo.

eferion

Un procesador ya viejo digamos que un pentium III es capaz de ejecutar 2 millones de instrucciones por segundo.

Una llamada a una instrucción puede suponer, digamos 20 instrucciones ( con paso de parámetros )... es decir, una llamada supone 0.01 ms... tu crees que es necesario optimizar eso?

Obviamente en procesadores más modernos ese tiempo será aún menor.

amchacon

Si tienes un compilador moderno y tienes las optimizaciones activadas, el compilador hará las funciones inline cuando sea necesario.

¿Cuando no hará las funciones inline? Cuando por ejemplo, sea una función recursiva que el compilador no pueda "desenrollar" y convertir en un bucle.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

do-while

Cita de: eferion en 12 Mayo 2014, 16:18 PM
Un procesador ya viejo digamos que un pentium III es capaz de ejecutar 2 millones de instrucciones por segundo.

Una llamada a una instrucción puede suponer, digamos 20 instrucciones ( con paso de parámetros )... es decir, una llamada supone 0.01 ms... tu crees que es necesario optimizar eso?

Obviamente en procesadores más modernos ese tiempo será aún menor.

Buf, si son funciones que no trabajan de forma intensiva, evidentemente, no te hace falta optimizar demasiado, pero recuerdo cuando codifiqué los hash MD5 y SHA1, que son funciones que requieren realizar muchos cálculos, que poniendo llamadas a funciones quedaba un código muy corto y bonito, pero a la hora de obtener los checksum de archivos relativamente grandes el programa se eternizaba. Al final en lugar de utilizar tanta función tuve que recurrir a macros y a sustituir llamadas a funciones para calcular valores por tablas con los valores ya calculados para evitar llamadas a funciones y cálculos repetitivos, y la diferencia en cuanto al tiempo que costaba calcular la suma fue considerable.

Todo depende del uso que vayas a darle a la función.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

amchacon

Funciones inlines  y optimizaciones del compilador activadas al máximo. Las macros son propensas a errores...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

eferion

Cita de: do-while en 12 Mayo 2014, 19:06 PM
Todo depende del uso que vayas a darle a la función.

Cierto, pero los casos como estos no son precisamente comunes. Alguien que programe aplicaciones de escritorio por ejemplo puede no encontrarse nunca con este problema.

En cualquier caso, tal y como se ha comentado, la función tiene 200 líneas... la sobrecarga que puede suponer la llamada a la función con respecto al tiempo de ejecución de la función es despreciable