elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda programación C [agilizar programa]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda programación C [agilizar programa]  (Leído 2,982 veces)
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Ayuda programación C [agilizar programa]
« 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.


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #1 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!


En línea

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

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #2 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.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #3 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.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #4 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.
En línea

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


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #5 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!
En línea

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


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #6 en: 12 Mayo 2014, 21:54 pm »

Funciones inlines  y optimizaciones del compilador activadas al máximo. Las macros son propensas a errores...
En línea

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


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda programación C [agilizar programa]
« Respuesta #7 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Agilizar la instalación de actualizaciones en Windows XP?
Scripting
Bur123gos 3 2,954 Último mensaje 28 Junio 2007, 23:42 pm
por sirdarckcat
agilizar pc
Scripting
flony 0 2,326 Último mensaje 13 Octubre 2009, 05:43 am
por flony
Agilizar el desarrollo con Notepad++
Desarrollo Web
madpitbull_99 2 5,925 Último mensaje 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,104 Último mensaje 3 Mayo 2014, 02:51 am
por Eleкtro
Programacion de programa
Programación General
m5gold 2 2,225 Último mensaje 23 Febrero 2018, 16:05 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines