可能重复: malloc与calloc之间的差异
请解释这句话的意义,
malloc()函数和calloc()函数之间的另一个区别是,malloc( )函数分配的内存包含垃圾值,而calloc( )函数分配的内存包含所有零。
资料来源(“C”编程,Salim Y.amdani)
谢谢
发布于 2010-08-10 12:51:03
来自内存
malloc()更快,因为calloc()初始化分配的内存以包含所有零。由于您通常希望自己使用和初始化内存,因此可能不需要使用calloc()的额外好处。
发布于 2010-08-10 12:49:55
calloc在您使用内存之前正在初始化它,但是malloc没有。
请参阅这链接:
函数应该为nelem元素数组分配未使用的空间,每个元素的大小以字节为单位。空间应初始化为所有位元0。
对于malloc,如果您想保证同样的效果,就必须调用像memset这样的东西来重置内存。
char* buffer = (char*)malloc(100);
memset(buffer,0,100);calloc为您节省了额外的步骤。初始化内存的意义在于,您正在将一个变量获取到一个已知状态,而不是一个未知状态。因此,如果您正在检查一个变量(比如数组元素)的期望值,那么通过提前对变量进行预初始化,您可以确保正在检查的值不是垃圾值。换句话说,可以区分垃圾值和合法值.。
例如,如果您只是将垃圾留在变量中,并且正在检查某个值(例如42 ),那么您就无法知道程序是否真的将该值设置为42,或者因为您没有初始化它,所以这只是一些垃圾剩余物。
发布于 2010-08-10 13:02:27
calloc(...)基本上是malloc +memset(如果您想要初始化内存)
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。
https://stackoverflow.com/questions/3449031
复制相似问题