calloc()与malloc()

可能重复:
malloc和calloc之间的区别

请解释这个声明的意义,

malloc()和calloc()函数之间的另一个区别是,由malloc()函数分配的内存包含垃圾值,而由calloc()函数分配的内存包含全零。

来源('C'编程,Salim Y. Amdani)

谢谢


从http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory

malloc()更快,因为calloc()初始化分配的内存以包含所有的零。 既然你通常会想自己使用和初始化内存,那么calloc()这个额外好处可能就没有必要了。


calloc在使用它之前正在初始化内存,但malloc不会。

请参阅此链接:

calloc()函数应该为每个字节大小为elsize的nelem元素分配一个未使用的空间。 该空间应初始化为全0位。

使用malloc ,如果你想保证相同的效果,你必须调用memset来重置内存,例如

char* buffer = (char*)malloc(100);
memset(buffer,0,100);

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.

当你使用malloc分配一些内存时,它以前的内容不会被清除(即未初始化)。 您可能会得到机器启动时设置的随机值,或者您可能会看到一些属于以前运行的程序的内存,但在分配和程序退出后仍未清除。

calloc本身比malloc慢,因为你必须花一些时间来清除已分配内存的内容。 所以如果你只需要分配一些内存然后复制一些内容,你可以自由使用malloc

链接地址: http://www.djcxy.com/p/28447.html

上一篇: calloc() v. malloc()

下一篇: Does malloc lazily create the backing pages for an allocation on Linux (and other platforms)?