Al leer acerca de memmove, he leído que puede manejar OVERLAPS DE MEMORIA pero no puedo entender cómo puede ocurrir una superposición de memmory entre dos cadenas y cómo esta función aún puede copiar correctamente el bloque de memoria.¿Cómo se produce la superposición de memoria y cómo se controla?
Respuesta
"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í?
memmove(p+1, p, 42);
Lo que requiere mover los bytes comenzando por el final. Memcpy() hace un lío.
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. :-) –
¿por qué se debería usar memcpy si conoce memmove;) –
Porque memcpy() es más rápido. –
- 1. Cómo liberar memoria cuando se produce una excepción fuera de la memoria en Delphi usando SetLength
- 2. ¿Cómo se controla la disponibilidad de varios sitios web?
- 3. ¿Cómo se controla la arquitectura en un proyecto ágil?
- 4. Al aplicar SVD, ¿se produce un error de memoria instantáneamente?
- 5. ¿Cómo se mapea la memoria cuando se usa la horquilla?
- 6. ¿Cómo se maneja la memoria del código?
- 7. ¿Cómo se borra la memoria en Javascript?
- 8. ¿Cómo detectar la superposición de elementos (superposición) usando JavaScript?
- 9. ¿Cómo se produce un mapa de calor con ggplot2?
- 10. Classcastexception se produce al azar
- 11. ¿Cómo se produce una gran cantidad de datos?
- 12. ¿Cómo se ajusta/controla la escala en un treemap (usando la biblioteca 'portfolio') en R?
- 13. ¿Cómo se puede crear una superposición en css?
- 14. ClassCastException se produce en onRestoreInstanceState
- 15. ¿Cómo comprobar que no se produce un error?
- 16. Anular onDraw para cambiar cómo se produce el dibujo (Android)
- 17. ¿Cómo se inyecta el código compilado JIT en la memoria y se ejecuta?
- 18. Chrome deja de liberar memoria, la recolección de basura no se produce como se esperaba (librería Mootools/MochaUI)
- 19. Memoria virtual y alineación: ¿cómo se factorizan juntas?
- 20. ¿Cómo se produce un eje a escala exponencial?
- 21. ¿Cómo se almacenan las variables de bytes en la memoria?
- 22. ¿Cómo se almacena la matriz en la memoria?
- 23. ¿Cómo se implementa la memoria de solo lectura en C?
- 24. Cómo hacer que el anuncio se muestre en la parte inferior de la pantalla sin superposición
- 25. ¿Cómo se controla el ancho mínimo de una celda de tabla?
- 26. Evitar la superposición cuando se agitan los puntos
- 27. ¿Se puede limpiar la memoria?
- 28. ¿Cómo se determina el costo de la CPU y la memoria de una función?
- 29. WPF: Cómo implementar arrastrar y soltar con anidada (jerárquica) controla
- 30. ¿Cómo se produce una cadena local de fecha y hora en Haskell?
No entiendo cómo manejaría una función el problema de superposición de memoria –
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