4

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

感谢您的回复。

问候。

4

3 回答 3

8

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

于 2010-04-09T08:49:33.097 回答
1

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

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

于 2010-04-09T09:15:47.437 回答
0

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

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

于 2010-04-09T08:48:43.547 回答