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 bzeroet de ne memsetpas 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 bzeroest 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 memsetpourrait le faire. Cela ne semble pas nécessairement être une raison pour ne pas l'utiliser memsetpour la réinitialisation de la mémoire.
bzeroest considérée comme obsolète et n'est en outre pas une fonction C standard. Selon le manuel, il memsetest préférable bzeropour cette raison. Alors, pourquoi voudriez-vous encore utiliser bzeroplus memset? Juste pour les gains d'efficacité, ou est-ce quelque chose de plus? De même, quels sont les avantages de memsetsur bzeroqui en font l'option préférée de facto pour les programmes plus récents?
memsetpeut ê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. bzeroest obsolète, et c'est une raison suffisante pour ne pas l'utiliser.