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_in
ou buffers de char (que usamos para enviar dados entre cliente e servidor), o professor nos instruiu a usar apenas bzero
e não memset
inicializá-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 memset
possa fazer. Isso ainda não parece necessariamente uma razão para absolutamente não usar memset
para 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 bzero
esse motivo. Então, por que você iria querer ainda usam bzero
mais memset
? Apenas pelos ganhos de eficiência, ou é algo mais? Da mesma forma, quais são os benefícios do memset
excesso bzero
que o tornam a opção preferida de fato para programas mais recentes?
memset
pode 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.