我们知道malloc()
和new
操作动态地从堆中分配内存,但堆在哪里?每个进程在命名空间中是否有自己的私有堆用于动态分配,或者操作系统具有由所有进程共享的全局堆。更重要的是,我从教科书中读到,一旦发生内存泄漏,在下次重新启动计算机之前,丢失的内存将无法重复使用。这篇论文是对的吗?如果答案是肯定的,我们如何解释呢?
感谢您的回复。
问候。
答案 0 :(得分:8)
内存是从进程虚拟内存的用户地址空间分配的。当进程终止时,操作系统将回收所有内存,无需重新启动计算机。
答案 1 :(得分:1)
通常,C运行时将使用各种OS API来分配作为其进程地址空间一部分的内存。在分配的内存中,它将创建一个堆,并通过调用 malloc 或 new 从该堆中分配内存。
这样做的原因是,OS API通常是粗粒度的,需要您以大块(例如页面大小)分配内存,而您的应用程序通常希望在任何时候分配少量内存。
答案 2 :(得分:0)
您没有提及您感兴趣的操作系统。 这完全意味着没有直接的答案。
尝试查看一些关于操作系统的书 例如的Tanenbaum的