malloc()和calloc()之间的区别?

任何人都可以解释在C中使用malloc()calloc()进行动态内存分配有什么区别?

尝试这样做:使用malloc分配一些内存

 char* pszKuchBhi ; pszKuchBhi = malloc(10) ; printf( "%s\n", pszKuchBhi ) ; // Will give some junk values as the memory allocated is not initialized and // was storing some garbage values 

现在用calloc替换malloc同样做。 看到不同。

 char* pszKuchBhi ; pszKuchBhi = calloc( 10, 1 ) ; printf( "%s\n", pszKuchBhi ) ; //Will print nothing as the memory is initialized to 0 

calloc分配的内存初始化为0.初学者初始化内存很好,但性能方面的calloc很慢,因为它必须分配然后初始化。 为了更好地澄清,你可以随时谷歌相同的问题,但更好地体验它来看看里面。 你也可以留意你的记忆,亲眼看看。

malloc返回具有固定字节数的分配。 此内存未清除(垃圾值)。

calloc返回特定内存的固定数量对象的分配。 这个记忆是归零的。

如果要分配100个int。 你必须这样做:

 int *var; var = malloc(100 * sizeof(int)); // OR var = calloc(100, sizeof(int)); 

因为malloc在参数中占用了多个字节,而calloc接受了一个数字和一个元素,所以它正在进行计算本身,并填充用零分配的所有内存。

分配100个字节的内存,初始化为0。

 char *ptr = calloc(100, sizeof(char)); 

如果我们使用malloc(),那么

 char *ptr = malloc(100); int i = 0; for(i=0; i< 100; i++) ptr[i] = 0; 

分配内存后,如果初始化发生得更好,我们可以去malloc() 。 没有必要初始化为0,然后用数据初始化。

当您使用malloc分配内存时,内存只是分配了垃圾值,当您使用calloc分配内存时,将分配内存并使用0填充每个内存位置。

一个是原语( malloc() ),另一个是便利函数( calloc() )。 在本质上,您可以将calloc()视为如此实现:

 void * my_calloc(size_t num_elems, size_t elem_size) { const size_t bytes = num_elems * elem_size; void *p; if((p = malloc(bytes)) != NULL) { memset(p, 0, bytes); } return p; }