In una lezione di Programmazione di sistemi ho preso questo semestre precedente, abbiamo dovuto implementare un client / server di base in C. All'inizializzazione delle strutture, come sock_addr_in
, o char buffer (che usavamo per inviare i dati avanti e indietro tra client e server) il professore ci ha indicato di utilizzare bzero
e non solo memset
di inizializzarli. Non ha mai spiegato perché, e sono curioso di sapere se esiste una ragione valida per questo?
Vedo qui: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown che bzero
è più efficiente a causa del fatto che sarà sempre azzeramento della memoria, quindi non lo fa deve fare qualsiasi controllo aggiuntivo che memset
può fare. memset
Tuttavia, ciò non sembra necessariamente un motivo per non utilizzare assolutamente per azzerare la memoria.
bzero
è considerato obsoleto e inoltre non è una funzione C standard. Secondo il manuale, memset
è preferito rispetto bzero
a questo motivo. Allora perché si vuole utilizzare ancora bzero
sopra memset
? Solo per i guadagni di efficienza o è qualcosa di più? Allo stesso modo, quali sono i vantaggi di memset
Over bzero
che la rendono di fatto l'opzione preferita per i programmi più recenti?
memset
potrebbe essere leggermente meno efficiente a causa di "un po 'più di controllo in corso" è sicuramente un caso di ottimizzazione prematura: qualunque sia il guadagno che potresti vedere omettendo un'istruzione CPU o due non ne vale la pena quando puoi compromettere la portabilità del tuo codice. bzero
è obsoleto e questo è un motivo sufficiente per non usarlo.