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
Respuesta Responder a este mensaje
#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.

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


.

Respuesta Responder a este mensaje
#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 ?

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.

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


.



.

Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida