在上学期的系统编程课程中,我们不得不用C语言实现一个基本的客户端/服务器。在初始化structsock_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
,使其实际上成为较新程序的首选选择?
我看不出有任何理由,更喜欢bzero
了memset
。
memset
是标准C函数,而bzero
从未使用过C标准函数。其基本原理可能是因为您可以使用memset
function实现完全相同的功能。
现在,关于效率,像这样的编译器gcc
使用内置的实现,memset
当0
检测到常量时,它们会切换到特定的实现。同为glibc
当建宏被禁用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句