我正在阅读有关 C 中的指针和动态内存分配的内容。我发现函数 calloc()
类似于 malloc()
但前者会初始化内存到 0。
我不明白为什么将内存初始化为零?
注意:我问的不是malloc和calloc的区别,而是内存初始化为零的意义。
提前致谢。
最佳答案
p = calloc(12, 1024);
大致相当于:
p = malloc(12 * 1024);
if (p != NULL)
memset(p, 0, 12 * 1024);
所以 calloc
做了两件 malloc
没有做的事情:
- 它将
nmemb
和size
变量相乘以计算分配的总大小 - 它将分配的每个字节设置为零
为此,calloc
适用于分配数组,特别是标量值数组。
有些情况下这种初始化是不可取的:
- 初始化为全零位对于指针来说是不够的,其中
NULL
可能不全为零。 - 如果您打算将分配用作缓冲区并将数据读入其中,那么首先将其初始化为全零是浪费时间。
关于c - 在C中将内存初始化为零是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851565/