Dans un cours de programmation système que j'ai suivi ce semestre précédent, nous avons dû implémenter un client / serveur de base en C.Lors de l'initialisation des structs, like sock_addr_in
, ou char buffers (que nous utilisions pour envoyer des données entre le client et le serveur) le professeur nous a demandé de les utiliser uniquement bzero
et de ne memset
pas les initialiser. Il n'a jamais expliqué pourquoi, et je suis curieux de savoir s'il y a une raison valable à cela?
Je vois ici: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown qui bzero
est plus efficace en raison du fait que la mémoire ne sera jamais remise à zéro, donc ce n'est pas doivent faire toute vérification supplémentaire qui memset
pourrait le faire. Cela ne semble pas nécessairement être une raison pour ne pas l'utiliser memset
pour la réinitialisation de la mémoire.
bzero
est considérée comme obsolète et n'est en outre pas une fonction C standard. Selon le manuel, il memset
est préférable bzero
pour cette raison. Alors, pourquoi voudriez-vous encore utiliser bzero
plus memset
? Juste pour les gains d'efficacité, ou est-ce quelque chose de plus? De même, quels sont les avantages de memset
sur bzero
qui en font l'option préférée de facto pour les programmes plus récents?
memset
peut être légèrement moins efficace en raison de "un peu plus de vérification" est certainement un cas d'optimisation prématurée: quels que soient les gains que vous pourriez voir en omettant une instruction CPU ou deux ne valent pas la peine lorsque vous pouvez compromettre la portabilité de votre code. bzero
est obsolète, et c'est une raison suffisante pour ne pas l'utiliser.