c - 在C中将内存初始化为零是什么意思?

标签 c memory allocation

我正在阅读有关 C 中的指针和动态内存分配的内容。我发现函数 calloc() 类似于 malloc() 但前者会初始化内存到 0。

我不明白为什么将内存初始化为零

注意:我问的不是malloc和calloc的区别,而是内存初始化为零的意义。

提前致谢。

最佳答案

p = calloc(12, 1024);

大致相当于:

p = malloc(12 * 1024);
if (p != NULL)
    memset(p, 0, 12 * 1024);

所以 calloc 做了两件 malloc 没有做的事情:

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

为此,calloc 适用于分配数组,特别是标量值数组。

有些情况下这种初始化是不可取的:

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

关于c - 在C中将内存初始化为零是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851565/

上一篇:c - 单链表

下一篇:c - ASCII 到十进制值

相关文章:

c - 如何在 C exec.file 中找到构建的目录字符串?

c - 如何在标准C中通过特定分隔符 `……`(非单个字符)分割中文字符数组?

c++ - 如果不使用 delete,是否会在函数结束时释放内存?

c# - block 分配

c++ - 为什么这个 C++ STL 分配器不分配?

c - "long i = 1;"会导致 C 中的隐式类型转换吗?

c++ - 在 main() 之前在编译时或运行时初始化函数指针的全局数组

c++ - 动态为 C 字符串分配内存,无需先询问用户输入有多长

c - 迭代C中未初始化的数组

c++ - Insufficient memory 错误 Opencv/c++