堆是如何在进程之间分配的?
Posted
技术标签:
【中文标题】堆是如何在进程之间分配的?【英文标题】:How is the heap divided up among processes? 【发布时间】:2022-01-16 08:44:07 【问题描述】:我知道每个进程都有自己的独立堆,与线程不同(它们共享一个公共堆,因此会减慢堆内存分配,因为 malloc 等函数需要使用锁进行同步)。但是,如何确定分配给每个进程的内存的位置和数量,以及如何确保这不会与分配给其他进程的内存冲突?
我无法通过搜索找到明确的答案,但如果存在,请提供一个链接,我将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:为了回答这个问题,您需要了解虚拟内存。在虚拟内存中,内存对于用户进程可以看到的内容是连续的。堆被赋予了非常大的虚拟内存,它仅受物理 RAM 数量和交换空间的限制,以支持分配。进程本身只看到一个连续的虚拟地址空间。在 Linux 上,内存分配是使用伙伴算法完成的,内核为每个页面保留一个页面结构。因此,task_struct 中的页面结构和进程的内存映射允许 Linux 内核跟踪哪些页面是空闲的,哪些不是。
【讨论】:
以上是关于堆是如何在进程之间分配的?的主要内容,如果未能解决你的问题,请参考以下文章