可能重复:
c malloc和calloc之间的区别
请解释一下这句话的意义,
malloc()和calloc()函数之间的另一个区别是malloc()函数分配的内存包含垃圾值,而calloc()函数分配的内存包含全零.
来源('C'编程,Salim Y. Amdani)
谢谢
Edw*_*eno 39
来自http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory
malloc()更快,因为calloc()初始化分配的内存以包含全零.由于您通常希望自己使用和初始化内存,因此calloc()可能不需要这种额外的好处.
dcp*_*dcp 24
calloc在使用之前初始化内存,但malloc没有.
请参考此链接:
calloc()函数应为nelem元素数组分配未使用的空间,每个元素的大小(以字节为单位)为elsize.该空间应初始化为所有位0.
有了malloc,如果你想保证相同的效果,你必须调用像memset这样的东西来重置内存,例如
char* buffer = (char*)malloc(100);
memset(buffer,0,100);
Run Code Online (Sandbox Code Playgroud)
calloc为您节省额外的一步.初始化内存的意义在于,您将变量变为已知状态而非未知状态.因此,如果要检查变量(例如数组元素)的预期值,那么通过提前预先初始化变量,可以确保要检查的值不是垃圾.换句话说,您可以区分垃圾和合法值.
例如,如果你只是在变量中留下垃圾而你正在检查一些值,比如说42,那么你无法知道你的程序是否真的将值设置为42,或者这只是因为你只剩下一些垃圾了没有初始化它.
calloc(...)基本上是malloc+ memset(如果你想0初始化内存)
ptr = malloc(sizeof(struct fubar));
memset(ptr, 0, sizeof (struct fubar)); //here we could use some different value instead of 0 whereas calloc always 0 initialises.
Run Code Online (Sandbox Code Playgroud)
当您使用malloc分配一些内存时,它的先前内容不会被清除(即未初始化).您可能会获得在计算机启动时设置的随机值,或者您可能会看到某些内存属于以前运行的程序,但在分配和程序退出后仍未清除.
calloc本身比慢,malloc因为你必须花一些时间来清除已分配内存的内容.因此,如果您只需要分配一些内存然后复制一些内容,那么您可以自由使用malloc.