在上学期我参加的系统编程课程中,我们必须在 C 中实现一个基本的客户端/服务器。在初始化结构时,比如sock_addr_in或 char 缓冲区(我们用来在客户端和服务器之间来回发送数据),教授指示我们只使用bzero而不是memset初始化它们。他从来没有解释过为什么,我很好奇这是否有正当理由?
sock_addr_in
bzero
memset
我在这里看到:http: //fdiv.net/2009/01/14/memset-vs-bzero-ultimate- showdown效率bzero更高,因为它只会将内存归零,所以它不会必须做任何memset可能做的额外检查。不过,这似乎仍然不一定是绝对不memset用于归零内存的理由。
bzero被认为已弃用,而且不是标准的 C 函数。根据手册,由于这个原因,memset是首选。bzero那么你为什么还要使用bzeroovermemset呢?只是为了提高效率,还是更多?同样,使其成为新程序事实上的首选选项memset的好处是什么?bzero
我看不出有任何理由更bzero喜欢memset.
memset是标准 C 函数,而bzero从来不是 C 标准函数。基本原理可能是因为您可以使用函数实现完全相同的memset功能。
现在关于效率,编译器喜欢gcc使用内置实现,memset当检测到常量时切换到特定实现0。禁用glibc内置函数时也是如此。
gcc
0
glibc