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_in
o 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 bzero
y no los memset
inicialicemos. 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 bzero
es más eficiente debido al hecho de que solo habrá cero memoria, por lo que no tiene que hacer cualquier verificación adicional que memset
pueda hacer. Sin embargo, eso no necesariamente parece ser una razón para no usar absolutamente memset
para poner a cero la memoria.
bzero
se considera obsoleto y, además, no es una función estándar de C. De acuerdo con el manual, memset
se prefiere bzero
por esta razón. Así que ¿por qué desea utilizar aún bzero
más memset
? ¿Solo por las ganancias de eficiencia, o es algo más? Del mismo modo, ¿cuáles son los beneficios de memset
Over bzero
que la convierten en la opción preferida de facto para los programas más nuevos?
memset
puede 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. bzero
es obsoleto, y esa es razón suficiente para no usarlo.