MEMMOVE |
Déplacement de mémoire |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
void *memmove(const void *tampondestination, const void *tamponsource, size_t n) |
Paramètres
Nom | Description |
---|---|
tampondestination | Ce paramètre permet d'indiquer le tampon recevant les données |
tamponsource | Ce paramètre permet d'indiquer le tampon contenant les données à copier |
n | Ce paramètre permet d'indiquer la taille du tampon en octets |
Description
Cette fonction permet de copier un tampon source dans un tampon de destination de «n» octets.
Remarques
- La fonction memmove() copie le nombre de caractères du tableau pointé par tamponsource dans le tableau pointé par tampondestination. Si les tableaux se chevauchent, la copie se déroulera correctement, en plaçant le contenu correct dans tampondestination mais en laissant tamponsource modifié.
- La fonction memmove() renvoie un pointeur sur tamponsource.
- Définition et utilité : La fonction memmove est définie dans la bibliothèque <cstring> (ou <string.h> en C) et permet de copier un bloc de mémoire d'une zone à une autre, même si ces zones se chevauchent. Cela la distingue de memcpy, ne prenant pas en compte les chevauchements de mémoire. Elle est idéale pour les situations où la zone source et la zone de destination se chevauchent partiellement ou totalement.
- Gestion des chevauchements : Contrairement à memcpy, ne gérant pas les chevauchements de mémoire, memmove peut être utilisée en toute sécurité lorsque les zones mémoire source et destination se chevauchent. Elle gère les chevauchements en copiant les données dans un ordre spécifique (typiquement en copiant d'abord les données dans un tampon temporaire ou en déplaçant les octets dans un ordre sécurisé), ce qui évite que les données sources ne soient écrasées avant qu'elles ne soient copiées.
- Flexibilité et utilisation : memmove est souvent utilisée dans des contextes où l'on souhaite effectuer une copie ou un déplacement d'une partie d'un tableau ou d'une structure en mémoire sans se soucier des zones se chevauchant. Par exemple, elle est fréquemment utilisée pour déplacer des éléments dans un tableau sans risquer de modifier les éléments de manière incorrecte en cas de chevauchement entre les zones source et destination.
- Performance par rapport à memcpy : Bien que memmove soit généralement plus lente que memcpy dans des situations où les zones mémoire ne se chevauchent pas, cette différence de performance est un compromis nécessaire pour garantir une gestion correcte des chevauchements. memmove effectue des vérifications supplémentaires et gère les cas de chevauchement de manière sécurisée, ce qui peut introduire une certaine surcharge en termes de performance. Si le chevauchement n'est pas un problème, memcpy sera plus rapide.
- Retour du pointeur dest : À l'instar de memcpy, memmove retourne un pointeur vers la zone de destination (dest). Cela permet aux utilisateurs de chaîner plusieurs appels à memmove ou de récupérer facilement la zone de mémoire de destination après l'opération. Cela permet également d'utiliser cette fonction de manière flexible et efficace dans les programmes effectuant plusieurs copies de mémoire.
- Sécurité de l'opération : L'un des avantages majeurs de memmove par rapport à memcpy est sa gestion sécurisée des chevauchements. En effet, même lorsque la zone de destination se trouve avant ou après la zone source dans la mémoire, memmove garantit que les données sont correctement copiées sans risquer d'écraser des données non encore copiées. Cette sécurité rend memmove idéale pour manipuler des blocs de mémoire dans des algorithmes où l'ordre et l'intégrité des données sont cruciaux, comme dans les opérations de tri ou de manipulation de tampons.
- Limitation à des blocs de mémoire homogènes : Comme memcpy, memmove ne prend pas en compte la signification des données dans les blocs de mémoire. Elle effectue simplement une copie binaire de num octets entre la source et la destination. Il est donc important de s'assurer que les blocs mémoire source et destination sont de types compatibles (par exemple, les structures ou les tableaux de même taille) pour éviter des comportements inattendus lors de l'utilisation de memmove.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

on obtiendra le résultat suivant :
B[0] = 0B[1] = 1
B[2] = 2
B[3] = 3
B[4] = 4
B[5] = 5
B[6] = 6
B[7] = 7
B[8] = 8
B[9] = 9
B[10] = 10
B[11] = 11
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - memcpy
Langage de programmation - C++ - Référence de procédures et fonctions - memset
Langage de programmation - C - Référence de procédures et fonctions - memmove
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 176.
Dernière mise à jour : Lundi, le 3 août 2015