Em uma aula de Programação de Sistemas que fiz neste semestre anterior, tivemos que implementar um cliente / servidor básico em C. Ao inicializar estruturas, como sock_addr_inou buffers de char (que usamos para enviar dados entre cliente e servidor), o professor nos instruiu a usar apenas bzeroe não memsetinicializá-los. Ele nunca explicou o porquê e estou curioso para saber se existe uma razão válida para isso.
Vejo aqui: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown que bzeroé mais eficiente devido ao fato de que apenas zerará a memória, por isso não precisa fazer qualquer verificação adicional que memsetpossa fazer. Isso ainda não parece necessariamente uma razão para absolutamente não usar memsetpara zerar a memória.
bzeroé considerado obsoleto e, além disso, não é uma função C padrão. De acordo com o manual, memseté preferível a bzeroesse motivo. Então, por que você iria querer ainda usam bzeromais memset? Apenas pelos ganhos de eficiência, ou é algo mais? Da mesma forma, quais são os benefícios do memsetexcesso bzeroque o tornam a opção preferida de fato para programas mais recentes?
memsetpode ser um pouco menos eficiente por causa de "um pouco mais de verificação" é definitivamente um caso de otimização prematura: quaisquer que sejam os ganhos que você pode ver ao omitir uma ou duas instruções da CPU, não valem a pena quando você pode comprometer a portabilidade do seu código. bzeroé obsoleto, e isso é motivo suficiente para não usá-lo.