内存动态分配驻留在哪里?

时间:2010-04-09 08:46:13

标签: operating-system dynamic-memory-allocation

我们知道malloc()new操作动态地从堆中分配内存,但堆在哪里?每个进程在命名空间中是否有自己的私有堆用于动态分配,或者操作系统具有由所有进程共享的全局堆。更重要的是,我从教科书中读到,一旦发生内存泄漏,在下次重新启动计算机之前,丢失的内存将无法重复使用。这篇论文是对的吗?如果答案是肯定的,我们如何解释呢?

感谢您的回复。

问候。

3 个答案:

答案 0 :(得分:8)

内存是从进程虚拟内存的用户地址空间分配的。当进程终止时,操作系统将回收所有内存,无需重新启动计算机。

答案 1 :(得分:1)

通常,C运行时将使用各种OS API来分配作为其进程地址空间一部分的内存。在分配的内存中,它将创建一个堆,并通过调用 malloc new 从该堆中分配内存。

这样做的原因是,OS API通常是粗粒度的,需要您以大块(例如页面大小)分配内存,而您的应用程序通常希望在任何时候分配少量内存。

答案 2 :(得分:0)

您没有提及您感兴趣的操作系统。 这完全意味着没有直接的答案。

尝试查看一些关于操作系统的书 例如的Tanenbaum的