在上学期的系统编程课程中,我们必须用C语言实现一个基本的客户端/服务器。在初始化结构(如sock_addr_in
或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
由于“多了点检查”而使效率可能稍低的想法肯定是过早优化的情况:当您可能会损害CPU的可移植性时,忽略一两个CPU指令可能会带来的收益是不值得的码。bzero
已过时,这是不使用它的充分理由。