2010-09-03 9 views

Respuesta

5

"Superposición de memoria" no se produce por sí sola. Es usted quien puede suministrar la función memmove con regiones de memoria que se superponen. Tome dos punteros en la misma matriz y puede terminar fácilmente con regiones de memoria superpuestas.

Por supuesto, también puede crear fácilmente objetos superpuestos a través de uniones.

No está claro qué quiere decir con la segunda parte de la pregunta ("cómo puede esta función copiar aún el bloque de memoria correctamente"). ¿Dónde ves el problema aquí?

+0

No entiendo cómo manejaría una función el problema de superposición de memoria –

+0

Funciona como si la fuente se hubiera copiado en otro almacenamiento intermedio y luego se hubiera copiado en el destino. Memcpy() copia fuente a destino directamente. – Jefferson

3
memmove(p+1, p, 42); 

Lo que requiere mover los bytes comenzando por el final. Memcpy() hace un lío.

+0

Estrictamente hablando, 'memcpy' tiene un comportamiento indefinido si se usa de esta manera. Es concebible que funcione, por ejemplo, si se escribió asumiendo que copiar hacia atrás es más rápido, o si 'memcpy' se acaba de implementar como una llamada a' memmove', pero nunca se debe confiar en tales cosas. :-) –

+0

¿por qué se debería usar memcpy si conoce memmove;) –

+0

Porque memcpy() es más rápido. –

Cuestiones relacionadas