Autor
|
Tema: Ayuda programación C [agilizar programa] (Leído 3,245 veces)
|
David8
Desconectado
Mensajes: 50
|
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.
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
David8
Desconectado
Mensajes: 50
|
¡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.
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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.
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
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!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Funciones inlines y optimizaciones del compilador activadas al máximo. Las macros son propensas a errores...
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Agilizar la instalación de actualizaciones en Windows XP?
Scripting
|
Bur123gos
|
3
|
3,157
|
28 Junio 2007, 23:42 pm
por sirdarckcat
|
|
|
agilizar pc
Scripting
|
flony
|
0
|
2,482
|
13 Octubre 2009, 05:43 am
por flony
|
|
|
Agilizar el desarrollo con Notepad++
Desarrollo Web
|
madpitbull_99
|
2
|
6,173
|
29 Marzo 2011, 21:55 pm
por kr0no
|
|
|
AYUDA Agilizar y reducir código. VB.NET Framework 4.5
.NET (C#, VB.NET, ASP)
|
Torvic98
|
2
|
2,274
|
3 Mayo 2014, 02:51 am
por Eleкtro
|
|
|
Programacion de programa
Programación General
|
m5gold
|
2
|
2,469
|
23 Febrero 2018, 16:05 pm
por Eleкtro
|
|