У класі системного програмування, який я взяв у цьому попередньому семестрі, нам довелося реалізувати базовий клієнт / сервер у 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
є застарілим, і це є достатньою підставою не використовувати його.