为了账号安全,请及时绑定邮箱和手机立即绑定

为什么malloc+memset比calloc慢?

为什么malloc+memset比calloc慢?

C
慕尼黑8549860 2019-06-18 16:09:18
为什么malloc+memset比calloc慢?大家都知道calloc与malloc它初始化分配的内存。带着calloc,内存设置为零。带着malloc,内存未清除。所以在日常工作中,我认为calloc如malloc+memset..顺便说一句,为了好玩,我为基准测试编写了以下代码。结果令人困惑。代码1:#include<stdio.h>#include<stdlib.h>#define BLOCK_SIZE 1024*1024*256int main(){         int i=0;         char *buf[10];         while(i<10)         {                 buf[i] = (char*)calloc(1,BLOCK_SIZE);                 i++;         }}守则1的输出:time ./a.out   **real 0m0.287s**  user 0m0.095s  sys 0m0.192s代码2:#include<stdio.h>#include<stdlib.h>#include<string.h>#define BLOCK_SIZE 1024*1024*256int main(){         int i=0;         char *buf[10];         while(i<10)         {                 buf[i] = (char*)malloc(BLOCK_SIZE);                 memset(buf[i],'\0',BLOCK_SIZE);                 i++;         }}守则2的输出:time ./a.out    **real 0m2.693s**  user 0m0.973s  sys 0m1.721s顶替memset带着bzero(buf[i],BLOCK_SIZE)在代码2中产生相同的结果。我的问题是:为什么malloc+memset比calloc?怎么能calloc这么做?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

因为在许多系统上,在空闲的处理时间里,操作系统会自行将空闲内存设置为零,并将其标记为安全。calloc()所以当你打电话calloc(),它可能已经有了免费的零内存给你。


查看完整回答
反对 回复 2019-06-18
?
森林海

TA贡献2011条经验 获得超2个赞

在某些平台上,在某些模式下,malloc在返回内存之前将内存初始化为一些典型的非零值,因此第二个版本很可能会对内存进行两次初始化。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 998 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信