En una clase de Programación de Sistemas que tomé este semestre anterior, tuvimos que implementar un cliente / servidor básico en C. Al inicializar las estructuras, me gusta sock_addr_ino buffers de char (que solíamos enviar datos de un lado a otro entre el cliente y el servidor), el profesor nos indicó que solo los usemos bzeroy no los memsetinicialicemos. Nunca explicó por qué, y tengo curiosidad si hay una razón válida para esto.
Veo aquí: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown que bzeroes más eficiente debido al hecho de que solo habrá cero memoria, por lo que no tiene que hacer cualquier verificación adicional que memsetpueda hacer. Sin embargo, eso no necesariamente parece ser una razón para no usar absolutamente memsetpara poner a cero la memoria.
bzerose considera obsoleto y, además, no es una función estándar de C. De acuerdo con el manual, memsetse prefiere bzeropor esta razón. Así que ¿por qué desea utilizar aún bzeromás memset? ¿Solo por las ganancias de eficiencia, o es algo más? Del mismo modo, ¿cuáles son los beneficios de memsetOver bzeroque la convierten en la opción preferida de facto para los programas más nuevos?
memsetpuede ser un poco menos eficiente debido a "un poco más de comprobación en marcha" es definitivamente un caso de optimización prematura: cualesquiera que sean las ganancias que pueda ver al omitir una o dos instrucciones de la CPU no valen la pena cuando puede poner en peligro la portabilidad de su código. bzeroes obsoleto, y esa es razón suficiente para no usarlo.