需要了解虚拟内存的概念。
当一个进程请求 2GB 映射到 Linux 环境中 4GB 的虚拟内存(1GB 内核:3GB 用户空间)时,另一个进程已经持有 2GB 的映射。
栈、堆、数据段的映射是如何发生的?我找不到任何例子来解释我的理解。教科书只单独提到了每个映射,但没有实际的方法。
答案1
假设我们有 3 GiB 的可用虚拟地址空间,并且进程的文本、堆栈、堆和先前的内存映射一起仅占用少量地址空间(远小于 1 GiB)。然后,如果这个进程请求大小为 2GB 的映射,那么就没有问题,有足够的空间来容纳该映射。
(实际上,有一种小情况是不正确的:如果进程的现有映射是碎片化的并且分散在地址空间周围并且没有连续的2GB 可用地址范围。但这不太可能)。
不同进程的地址空间中存在或不存在什么映射与之无关。