En lisant à propos de memmove j'ai lu qu'il peut gérer MEMORY OVERLAPS mais je suis incapable d'obtenir comment un chevauchement memmory peut se produire entre deux chaînes et comment cette fonction peut encore copier le bloc de mémoire correctement.Comment le chevauchement de mémoire se produit-il et comment est-il contrôlé?
Répondre
C'est vous qui pouvez fournir la fonction memmove
avec des zones de mémoire qui se chevauchent. Prenez deux pointeurs dans le même tableau et vous pouvez facilement vous retrouver avec des zones de mémoire se chevauchant.
Bien sûr, vous pouvez également créer facilement des objets qui se chevauchent via des unions.
Il n'est pas clair ce que vous entendez par la deuxième partie de la question ("comment cette fonction peut-elle encore copier correctement le bloc de mémoire"). Où voyez-vous le problème ici?
memmove(p+1, p, 42);
Ce qui nécessite de déplacer les octets à partir de la fin. Memcpy() en fait un gâchis. Le chevauchement de mémoire ne se produit pas de lui-même.
Strictement parlant, 'memcpy' a un comportement indéfini s'il est utilisé de cette façon. Cela pourrait bien fonctionner, par exemple s'il était écrit en supposant que la copie en sens inverse est plus rapide, ou si 'memcpy' était simplement implémenté comme un appel à' memmove', mais vous ne devriez jamais compter sur de telles choses. :-) –
pourquoi voudrait-on jamais utiliser memcpy s'il connaît memmove;) –
Parce que memcpy() est plus rapide. –
- 1. Quels types de mémoire Tomcat utilise-t-il et comment peut-il être contrôlé
- 2. Accès contrôlé et routage
- 3. UITableViewCell et chevauchement d'images
- 4. Comment puis-je empêcher le chevauchement de mon TextView?
- 5. Rendu d'objets translucides qui se chevauchent sans obscurcir le chevauchement
- 6. Hyperlien contrôlé hijaxing
- 7. ContentFlow: éviter le chevauchement d'images
- 8. Flash/Actionscript: Comment faire sprite chevauchement invisible
- 9. Chevauchement DIV
- 10. Le chevauchement des deux boutons
- 11. Comment se débarrasser Problème de fuite de mémoire "open_handle_to_dylib_path"
- 12. comment éviter le chevauchement des arêtes et des nœuds lors de l'utilisation de graphviz?
- 13. Div chevauchement et mauvaise hauteur
- 14. TCP: comment éviter un message chevauchement
- 15. Chevauchement d'éléments dans CSS
- 16. Comment réduire le temps de démarrage et la consommation de mémoire d'un programme Java?
- 17. Comment annuler le chevauchement de 2 images quand glisser et déposer en C#?
- 18. javascript div chevauchement
- 19. Empêcher le chevauchement des fenêtres dans GTK
- 20. Comment supprimer tous les éléments d'un NSTableView contrôlé par NSArrayController?
- 21. Position aléatoire sans chevauchement
- 22. Problème de chevauchement des règles
- 23. TSQL: chevauchement de date et valeurs d'intervalle
- 24. Manque de mémoire .. Comment?
- 25. UITableView chevauchement de texte
- 26. Période de chevauchement MySQL
- 27. Comment pouvez-vous calculer le pourcentage de chevauchement de deux rectangles?
- 28. IME fenêtre chevauchement curseur dans Edittext, comment l'empêcher?
- 29. Synchronisation d'un temporisateur pour éviter le chevauchement
- 30. Environnement de production contrôlé par la version
Je ne comprends pas comment une fonction gérerait problème de chevauchement de mémoire –
Cela fonctionne comme si la source a été copiée dans un autre tampon, puis copiée à la destination. Memcpy() copie directement la source vers la destination. – Jefferson