3

malloc()谁能解释在 C 中使用和calloc()用于动态内存分配有什么区别?

4

6 回答 6

5

尝试这样做:使用 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 很慢,因为它必须先分配然后再初始化。为了更好地澄清,您始终可以搜索相同的问题,但更好地体验它以了解内部情况。您还可以密切关注您的记忆,亲自查看。

于 2012-08-23T11:34:45.030 回答
0

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

calloc返回特定内存的固定数量对象的分配。此内存归零。

于 2012-08-23T08:55:01.623 回答
0

分配 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,然后用数据初始化。

于 2012-08-23T09:02:24.800 回答
0

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

int *var;

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

因为malloc在参数中需要多个字节,而calloc需要一个数字和一个元素,所以它自己进行计算,并用零填充所有分配的内存。

于 2012-08-23T09:04:30.300 回答
0

当您使用 malloc 分配内存时,内存只是分配有垃圾值,而当您使用 calloc 分配内存时,内存被分配并且每个内存位置都填充为 0。

于 2012-08-23T09:07:47.627 回答
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;
}
于 2012-08-23T09:56:29.583 回答