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; }