Dois-je traiter les cas quand je n'ai rien à déplacer / copier avec memmove()
/ memcpy()
comme cas de bord
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
ou devrais-je simplement appeler la fonction sans vérifier
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
La vérification de l'ancien extrait de code est-elle nécessaire?
memcpy
Réponses:
À partir de la norme C99 (7.21.1 / 2):
Donc la réponse est non; la vérification n'est pas nécessaire (ou oui; vous pouvez passer zéro).
la source
n
peut avoir la valeur zéro". Vous avez raison de dire que vous ne pouvez pas passer de pointeurs nuls, mais ce n'est pas le sujet de la question.Comme le dit @You, le standard spécifie que memcpy et memmove doivent gérer ce cas sans problème; car ils sont généralement mis en œuvre comme
vous ne devriez même pas avoir de pénalité de performance autre que l'appel de fonction; si le compilateur prend en charge intrinsèques / inlining pour de telles fonctions, la vérification supplémentaire peut même rendre le code un micro-petit-bit plus lent, puisque la vérification est déjà effectuée à un moment donné.
la source