堆是否与C中的进程相关?

kad*_*ina 5 c linux

我正在阅读malloc()和calloc()如何能够从堆中分配内存,我遇到了一个网站(http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html),其中说"如果你不释放内存,它将是一个内存泄漏,内存将无法用于其他进程分配内存".但到目前为止,我一直认为堆内存是每个进程,一个进程的堆内存不与其他进程的堆内存混合在一起.任何人都可以告诉我,我的理解是否正确?

das*_*ght 6

你是对的,堆内存是每个进程.但是,同一系统上的所有进程都从同一个固定池分配内存,该内存仅限于系统的物理内存和虚拟内存系统上的交换文件.这就是为什么如果一个进程持有它不需要的内存,它可能会使同一台计算机上的另一个进程缺乏内存.

在具有虚拟内存的系统上,这并不一定意味着其他进程将耗尽内存:这意味着为这些其他进程获取更多内存将需要将其他进程交换出内存.可能是您的泄漏过程或必须交换的其他过程.

在没有虚拟内存管理的系统上,在一个进程中泄漏内存会导致其他进程根本无法分配内存.