Dalam kelas Pemrograman Sistem yang saya ambil semester sebelumnya ini, kami harus mengimplementasikan klien dasar / server di C. Ketika menginisialisasi struct, seperti sock_addr_in
, atau buffer char (yang kami gunakan untuk mengirim data bolak-balik antara klien dan server) profesor menginstruksikan kami untuk hanya menggunakan bzero
dan tidak memset
menginisialisasi mereka. Dia tidak pernah menjelaskan mengapa, dan saya ingin tahu apakah ada alasan yang sah untuk ini?
Saya melihat di sini: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown yang bzero
lebih efisien karena fakta bahwa hanya akan menjadi memori zeroing, jadi tidak harus melakukan pengecekan tambahan yang memset
mungkin dilakukan. Itu masih belum tentu tampak seperti alasan untuk sama sekali tidak menggunakan memset
untuk mem-zero-up memori.
bzero
dianggap usang, dan lebih jauh lagi bukan fungsi standar C. Menurut manual, memset
lebih disukai daripada bzero
karena alasan ini. Jadi, mengapa Anda ingin tetap menggunakan bzero
lebih memset
? Hanya untuk keuntungan efisiensi, atau itu sesuatu yang lebih? Demikian juga, apa manfaat dari memset
kelebihan bzero
yang menjadikannya pilihan yang dipilih secara de facto untuk program yang lebih baru?
memset
mungkin sedikit kurang efisien karena "sedikit lebih banyak pengecekan" jelas merupakan kasus optimasi prematur: apa pun keuntungan yang mungkin Anda lihat dari menghilangkan satu atau dua instruksi CPU tidak sepadan ketika Anda dapat membahayakan portabilitas Anda. kode. bzero
sudah usang, dan itu cukup alasan untuk tidak menggunakannya.