【发布时间】:2015-12-24 23:23:01
【问题描述】:
我在书中看过:
动态内存分配器维护进程的虚拟区域 内存称为堆。细节因系统而异,但 不失一般性,我们将假设 堆是 在未初始化之后立即开始的零需求内存 bss 区域并向上增长(朝向更高的地址)。
所以,我很困惑为什么堆中的内存没有初始化为零。 更准确地说,我的意思是 malloc 返回的一块内存。
【问题讨论】:
-
这是一种不同的“堆”。事实上,C 标准没有“堆”的概念。这个词根据上下文有很多不同的含义。
-
因为它不是必需的。有
calloc。 -
为什么会这样?没有任何优势,而且对性能的影响可能很大。如果您希望将动态内存初始化为零,请使用
calloc(3)。 -
什么是“书”?它是对 C 工作原理的权威描述吗?从“不失一般性”等短语的使用来看,它似乎更侧重于教授系统如何工作,而不是具体系统如何做。
-
malloc不一定从堆中请求新内存。它还可以返回您的程序为freed 的内存。
标签: c memory-management