这是来自Beej的C指南 “使用calloc()的缺点是清理内存需要时间,在大多数情况下,你不需要清楚,因为你无论如何都要写它。但是如果你发现自己是malloc ()一个块,然后将内存设置为零,你可以使用calloc()在一次调用中执行此操作。“
那么当我想要将内存清零时,有什么可能的情况。
答案 0 :(得分:9)
当您将缓冲区传递给其文档中的状态时,缓冲区必须为零填充。为了安全起见,您也可能始终将内存归零;除非缓冲区真的很大,否则它实际上并不需要那么多时间。内存分配本身是操作中可能很昂贵的部分。
答案 1 :(得分:6)
一种情况是你要分配一个整数数组(比如,作为累加器或计数器变量),你希望数组中的每个元素都从0开始。
答案 2 :(得分:2)
在某些情况下,您为某个结构分配内存,而该结构的某些成员可能会在某个表达式或条件语句中进行评估,而不会初始化该结构在这种情况下,它将是有害的或将给你未定义的行为。因此,克服这种情况做得更好
1> malloc that structure and memset it with 0 before using that structure
或
2> calloc that structure
注意:一些带有malloc的高级内存管理程序也会将内存重置为0
答案 3 :(得分:0)
很多时候你可能希望将内存归零!
一些例子:
答案 4 :(得分:0)
如果所有已分配的内存都是零填充,则程序的行为可重现性更高(因此,如果重新运行程序,则行为更可能相同)。这就是为什么我不使用未初始化的malloc区域。
(出于类似的原因,在Linux上调试C或C ++程序时,我通常会echo 0 > /proc/sys/kernel/randomize_va_space
,以便mmap
行为更具可重复性。
如果你的程序没有分配巨大的块(即几十兆字节),那么在malloc中花费的时间远远大于将它归零的时间。