【发布时间】:2021-10-16 08:14:03
【问题描述】:
来自Wikipedia:
malloc() 不会初始化分配的内存,而 calloc() 保证分配的内存块的所有字节都已 初始化为 0。
我知道malloc 不会将内存初始化为任何东西,但我想知道,为什么会这样?这个设计决定背后有什么具体原因吗?以我的拙见,使用calloc(sizeof(T), 1) 似乎有点反模式,我想了解其意图。
【问题讨论】:
-
如果应用知道它会立即用其他东西填充它,为什么要将它归零?那只是浪费循环。因此,可以选择做任何一个似乎都非常合理/明智。
-
当
malloc被发明时,当时的 CPU 比我们今天习惯的要慢 1000 倍。效率在今天并不重要。每次将 malloc 的内存清零会花费大量时间,如果内存即将被其他内容填充,这些时间通常会被浪费。
标签: c memory-management malloc