众所周知,calloc
与malloc
不同,因为它初始化分配的内存。使用calloc
,内存被设置为0。使用malloc
,内存不会被清除。
calloc
看成malloc
+memset
。
顺便说一句,为了好玩,我写了下面的代码作为基准测试
结果令人困惑。
代码1:
#include<stdio.h>
#include<stdlib.h>
#define BLOCK_SIZE 1024*1024*256
int 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*256
int 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
在代码2中用bzero(buf[i],BLOCK_SIZE)
替换memset
产生相同的结果。
为什么malloc
+memset
比calloc
慢这么多?calloc
如何做到这一点?