У класі системного програмування, який я взяв у цьому попередньому семестрі, нам довелося реалізувати базовий клієнт / сервер у C. При ініціалізації структур, як sock_addr_in, або буферів char (які ми використовували для передачі даних між клієнтом і сервером) професор доручив нам використовувати тільки, bzeroа неmemset ініціалізувати їх. Він ніколи не пояснював чому, і мені цікаво, чи є для цього поважна причина?
Я бачу тут: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown, який bzeroє більш ефективним завдяки тому, що пам’яті лише коли-небудь буде нульова, тому це не відбувається доведеться робити будь-які додаткові перевірки, які memsetможуть зробити. Це все ще не обов'язково здається причиною, щоб абсолютно не використовувати memsetдля нульової пам'яті.
bzeroвважається застарілим, і, крім того, є не стандартною функцією С. Згідно з посібником, memsetвіддається перевага над bzeroцією причиною. То чому б ви хотіли все-таки використовувати bzeroбільше memset? Просто для підвищення ефективності, чи це щось більше? Крім того, які переваги memsetнад тим, bzeroщо роблять його фактично кращим варіантом для нових програм?
memsetможе бути дещо менш ефективною через "трохи більше перевірки", безумовно, є випадком передчасної оптимізації: незалежно від того, що ви можете отримати від пропуску інструкції процесора чи двох, не варто, коли ви можете поставити під загрозу переносимість вашої код. bzeroє застарілим, і це є достатньою підставою не використовувати його.