Mejorar rendimiento de función memcpy

22/04/2005 - 12:24 por Josep Maria | Informe spam
Hola, estamos realizando un proceso que ejecuta copias de
bloques de memoria de un origen a un destino, con la
función memcpy.

Esta función dentro de nuestro proceso se llega a ejecutar
miles y miles de veces.

Si bien el tiempo de respuesta que obtenemos del proceso
es aceptable, queriamos saber si existe alguna función de
biblioteca C que mejore el rendimiento de esta función
memcpy, es decir, que haga a igual cantidad de bytes a
copiar de una zona de memoria a otra, lo haga más rapido.

Realmente, si lo encontramos mejoraría mucho el
rendimimento pues insisto, la función memcpy se está miles
y miles de veces en este proceso y una leve mejora en el
desempeño de esa función haría que globalmente tardase
mucho menos el proceso.

Gracias.

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
22/04/2005 - 12:53 | Informe spam
La unica opción que se me ocurre que puede mejorar un poco el rendimiento es
llamar directamente a funciones del API de windows, pero entonces claro esta
tu programa ya no seria C estandar que puedas compilar para cualquier
plataforma.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
#2 Jose Maria
22/04/2005 - 13:11 | Informe spam
Gracias, he visto la función RtlMoveMemory que pertenece
al API de Windows (KERNEL32) pero no se como poner dentro
del código C una llamada a la misma.

Supongo que tendré que poner el #include de algun
archivo .h que tenga la definición de la función no ?

En el momento de linkar, ¿ He de añadir algúna
libreria .lib al entorno de Visual C++ ó no ?

Gracias por la ayuda.

Mostrar la cita
poco el rendimiento es
Mostrar la cita
entonces claro esta
Mostrar la cita
para cualquier
Mostrar la cita
#3 Josep Maria
22/04/2005 - 13:20 | Informe spam
Finalmente, ya he conseguido compilar el programa C
poniendo la llamada a la funcion RtlMoveMemory en vez de
llamar a memcpy de C, y al contrario de lo que esperaba,
ahora va un poco más lento.

He compilado con kernel32.lib que es la librería de C que
tiene la definición de la función. Quizás te referías a
llamar a la misma función en kernel32.dll ?

Como se hace en C ?

Mostrar la cita
#4 Rodrigo Corral [MVP]
22/04/2005 - 13:28 | Informe spam
Kernel32.lib solo sirver para enlaza esticamente a las funciones de
Kerne32.dll, la función que se llama es la que esta en Kernel32.dll. No se
por que ira más lento!!! es un poco raro... voy a mirar el código de memcpy
a ver que hace...



Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
#5 Rodrigo Corral [MVP]
22/04/2005 - 13:33 | Informe spam
Vaya... memcpy no llama al API como yo pensaba, sino que esta desarrollada
en ensamblador... no creo que se pueda hacer algo más rapido la verdad...


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Ads by Google
Search Busqueda sugerida