Programmierung Klasse in einem System Ich habe diesen Vorsemesters, wir hatten einen einfaches Client / Server in C zu implementieren , wenn dem structs Initialisierung wie sock_addr_inoder char - Puffers (die wir verwenden , um Daten zurück zu senden und her zwischen Client und Server) der Professor hat uns angewiesen, sie nur zu verwenden bzeround nicht memsetzu initialisieren. Er hat nie erklärt warum und ich bin gespannt, ob es dafür einen triftigen Grund gibt?
Ich sehe hier: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown , bzerodas effizienter ist, weil immer nur Speicher auf Null gesetzt wird, also nicht müssen zusätzliche Überprüfungen durchführen, memsetdie dies möglicherweise tun. Das scheint jedoch nicht unbedingt ein Grund zu sein, es absolut nicht memsetzum Nullstellen des Speichers zu verwenden.
bzerogilt als veraltet und ist darüber hinaus keine Standard-C-Funktion. Laut Handbuch memsetwird bzeroaus diesem Grund bevorzugt . Warum sollten Sie also immer noch bzeroüber verwenden memset? Nur für die Effizienzgewinne, oder ist es etwas mehr? Was sind die Vorteile von memsetOver bzero, die es zur de facto bevorzugten Option für neuere Programme machen?
memsetmöglicherweise etwas weniger effizient ist, weil "ein bisschen mehr überprüft wird", ist definitiv ein Fall vorzeitiger Optimierung: Was auch immer die Vorteile sind, die Sie durch das Weglassen eines oder zweier CPU-Befehle sehen, es lohnt sich nicht, wenn Sie die Portabilität Ihrer CPU gefährden können Code. bzeroist veraltet, und das ist Grund genug, es nicht zu benutzen.