В классе системного программирования, который я взял в предыдущем семестре, мы должны были реализовать базовый клиент / сервер на C. При инициализации sock_addr_inбуферов struct, like или char (которые мы использовали для отправки данных между клиентом и сервером и обратно), профессор поручил нам только использовать, bzeroа не memsetинициализировать их. Он никогда не объяснял почему, и мне любопытно, есть ли на то веские причины для этого?
Я вижу здесь: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown, который bzeroболее эффективен из-за того факта, что когда-либо будет только обнуление памяти, поэтому он не должны сделать любую дополнительную проверку, которая memsetможет сделать. Это, тем не менее, не обязательно является причиной для того, чтобы вообще не использовать memsetдля обнуления памяти.
bzeroсчитается устаревшим и, кроме того, не является стандартной функцией C. Согласно руководству, memsetявляется предпочтительным по bzeroэтой причине. Так почему же вы хотите по - прежнему использовать bzeroболее memset? Просто для повышения эффективности, или это нечто большее? Кроме того, каковы преимущества memsetнад bzeroчто делает его де - факто предпочтительным вариантом для новых программ?
memsetможет быть несколько менее эффективной из-за «немного большего количества проверок», определенно является случаем преждевременной оптимизации: какие бы выгоды вы ни увидели от пропуска одной или двух инструкций ЦП, они не стоят того, когда вы можете поставить под угрозу переносимость вашего код. bzeroустарел, и этого достаточно, чтобы не использовать его.