c - 为什么使用 bzero 而不是 memset?

标签 c memset systems-programming

在上学期我上的系统编程课上,我们必须用 C 语言实现一个基本的客户端/服务器。数据在客户端和服务器之间来回传输)教授指示我们只使用 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

memset 是一个标准的 C 函数,而 bzero 从来就不是一个 C 标准函数。基本原理可能是因为您可以使用 memset 函数实现完全相同的功能。

现在关于效率,gcc 等编译器使用 memset 的内置实现,当检测到常量 0 时切换到特定的实现。当禁用内置函数时,glibc 也是如此。

关于c - 为什么使用 bzero 而不是 memset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096990/

相关文章:

c - Openssl BIO_read 不返回

c++ - 删除调用内存集?

c - 最终程序从 C 函数返回

c - 我们应该在 C 中使用 exit() 吗?

c++ - 为什么 memset() 错误地初始化 int?

c - 使用 memset 和 int 值初始化整数数组 - 失败

c++ - Process Explorer 使用哪个 winapi 函数来挂起进程?

linux - 实际的系统调用是如何进行的?

c - 为什么使用 mmap 和 madvise 顺序逐行读取大文件比 fgets 慢?

C:代码矩阵和重复元素按出现降序排列