在C中将内存初始化为零意味着什么?

lmi*_*asf 1 c memory allocation

我正在阅读C中的指针和动态内存分配.我发现该函数calloc()类似malloc()但前者将内存初始化为0.

我不明白为什么将内存初始化为零意味着什么?

注意:我不是要求malloc和calloc之间的区别,而是将内存初始化为零的含义.

提前致谢.

Jon*_*art 11

p = calloc(12, 1024);
Run Code Online (Sandbox Code Playgroud)

大致相当于:

p = malloc(12 * 1024);
if (p != NULL)
    memset(p, 0, 12 * 1024);
Run Code Online (Sandbox Code Playgroud)

calloc两件事情malloc也没有:

  • 它将nmembsize变量相乘以计算分配的总大小
  • 它将分配的每个字节设置为零

为此,calloc有利于分配数组,特定的标量值数组.

有些情况下,这种初始化是不合需要的:

  • 初始化为全零位对于指针来说是不够的,其中指针NULL可能不是全零.
  • 如果您要将分配用作缓冲区并将数据读入其中,那么首先将其初始化为全零是浪费时间.


axi*_*iac 5

返回的内存块malloc()包含该内存中发生的任何数据;它包含先前使用该内存的剩余部分。

在返回之前,calloc()设置为0它返回的内存块的所有字节。