Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: David8 en 12 Mayo 2014, 15:55 pm



Título: Ayuda programación C [agilizar programa]
Publicado por: David8 en 12 Mayo 2014, 15:55 pm
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.


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: 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!


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: David8 en 12 Mayo 2014, 16:12 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.


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: 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.


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: amchacon en 12 Mayo 2014, 16:43 pm
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.


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: do-while en 12 Mayo 2014, 19:06 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!


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: amchacon en 12 Mayo 2014, 21:54 pm
Funciones inlines  y optimizaciones del compilador activadas al máximo. Las macros son propensas a errores...


Título: Re: Ayuda programación C [agilizar programa]
Publicado por: eferion en 13 Mayo 2014, 10:05 am
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