ในคลาสการเขียนโปรแกรมระบบที่ฉันเอาภาคการศึกษาก่อนหน้านี้เราต้องใช้ไคลเอนต์ / เซิร์ฟเวอร์ขั้นพื้นฐานในซีเมื่อเริ่มต้น structs เช่นsock_addr_in
หรือบัฟเฟอร์บัฟเฟอร์ (ที่เราใช้ในการส่งข้อมูลไปมาระหว่างไคลเอนต์และเซิร์ฟเวอร์) อาจารย์ สั่งให้เราใช้เท่านั้นbzero
และไม่memset
เริ่มต้นพวกเขา เขาไม่เคยอธิบายว่าทำไมและฉันอยากรู้ว่ามีเหตุผลที่ถูกต้องสำหรับสิ่งนี้หรือไม่?
ฉันดูที่นี่: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdownที่bzero
มีประสิทธิภาพมากขึ้นเนื่องจากความจริงที่ว่าจะเป็นศูนย์ความจำเท่านั้นดังนั้นมันจึงไม่ ต้องทำการตรวจสอบเพิ่มเติมใด ๆ ที่memset
อาจทำ ที่ยังคงไม่จำเป็นต้องดูเหมือนเหตุผลที่จะไม่ใช้อย่างแน่นอนmemset
สำหรับหน่วยความจำ zeroing
bzero
ถือว่าเลิกใช้แล้วและไม่ใช่ฟังก์ชัน C มาตรฐาน ตามคู่มือmemset
เป็นที่ต้องการมากกว่าbzero
ด้วยเหตุผลนี้ ดังนั้นทำไมคุณยังต้องการใช้bzero
มากกว่าmemset
? เพื่อประสิทธิภาพที่เพิ่มขึ้นหรือเป็นอะไรที่มากกว่านี้หรือ ในทำนองเดียวกันสิ่งที่มีประโยชน์memset
มากกว่าbzero
ที่ทำให้มันเป็นตัวเลือกที่ต้องการโดยพฤตินัยสำหรับโปรแกรมที่ใหม่กว่า?
memset
อาจมีประสิทธิภาพน้อยกว่าเล็กน้อยเนื่องจาก "การตรวจสอบเพิ่มเติมเล็กน้อย" เป็นกรณีของการปรับให้เหมาะสมก่อนกำหนด: สิ่งที่คุณเห็นจากการละเว้นคำสั่งซีพียูหรือสองอย่างนั้นไม่คุ้มค่าเมื่อคุณเสี่ยงต่อการพกพาของคุณ รหัส. bzero
ล้าสมัยและนั่นเป็นเหตุผลเพียงพอที่จะไม่ใช้