动态分配的内存位于哪里?

4
我们知道malloc()new操作会动态地从堆中分配内存,但是堆在哪里?每个进程是否都有自己私有的堆用于动态分配,还是操作系统有一个全局的堆被所有进程共享?另外,我从教材上读到,一旦发生内存泄漏,失踪的内存直到下次重启计算机前都不能再次使用。这个观点正确吗?如果是的话,我们该如何解释它?
谢谢您的回复。
问候。

你读过哪本关于内存泄漏的教材? - anon
@Neil 我从图书馆借的,记不得确切名称了,对不起。 - Summer_More_More_Tea
3个回答

8

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


请注意,如果进程正在运行,则其他人无法使用内存。如果泄漏不断增长,您很快就会用完内存。 - Jack

1
通常,C运行时将使用各种操作系统API来分配内存,这些内存是其进程地址空间的一部分。然后,在分配的内存中,它将创建一个堆,并通过调用mallocnew从该堆中分配内存。
原因是操作系统API通常是粗粒度的,并要求您一次性分配大块内存(如页面大小),而应用程序通常希望一次性分配小量内存。

0
你没有提到你感兴趣的操作系统。 这意味着没有直接的答案。 尝试阅读一些关于操作系统的书籍,例如Tanenbaum的。

@gineer 我想你的意思是实现依赖于平台。那Linux的实现怎么样呢?我对Windows不是很感兴趣。另外,我应该参考操作系统教材中的哪一部分?内存管理?谢谢。 - Summer_More_More_Tea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接