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 bzeroe non solo memsetdi 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 memsetpuò fare. memsetTuttavia, 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 bzeroa questo motivo. Allora perché si vuole utilizzare ancora bzerosopra memset? Solo per i guadagni di efficienza o è qualcosa di più? Allo stesso modo, quali sono i vantaggi di memsetOver bzeroche la rendono di fatto l'opzione preferita per i programmi più recenti?
memsetpotrebbe 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.