gpt4 book ai didi

c - 虚拟地址系统上的进程地址空间

转载 作者:行者123 更新时间:2023-11-30 19:11:52 30 4
gpt4 key购买 nike

在下面的链接中,Sdaz MacSkibbons 给出的答案简要概述了虚拟地址系统上的进程地址空间。

What happens when a computer program runs?

现在假设每个进程都获得 4GB 虚拟地址空间。现在这是否意味着该虚拟地址空间的顶部地址将获得堆栈部分(假设堆栈地址从0开始),而底部的地址空间将分配给文本、数据、全局变量和堆。由于堆大小发生变化,新的 malloc 分配是否会将虚拟地址空间页面直接映射到实际内存,或者是否检查先前分配到堆的虚拟地址页面是否空闲/可用。如果我们需要大量堆内存(例如大于 4GB),那么进程如何支持呢?

提前致谢。

最佳答案

您链接到的答案只是展示了一种完成事情的方法。

假设您有 4GB 逻辑地址空间,并非所有这些地址空间都可能有效,甚至可能有效的虚拟地址。

该逻辑地址空间的某些部分将专用于系统。系统不太可能使用或接近使用专用于它的整个逻辑地址范围。

逻辑地址空间中还会有其他区域没有有效的逻辑地址。

接下来,将内存描述为堆和栈是有误导性的。堆和堆栈只是读/写内存。它们没有什么特别的,操作系统并不关心内存的用途。

将程序部分视为:- 可执行,只读- 不执行,读/写- 不执行,只读

你的第二个问题是关于malloc的。 Malloc 实现管理读/写内存池。 Malloc 尝试通过从池中返回内存来处理内存请求。如果没有足够的可用内存,malloc 会通过将更多虚拟内存映射到逻辑地址空间来增加池的大小。

如果应用程序需要分配大量内存,通常不使用malloc。他们取而代之的是操作系统服务。如果您有 4GB 地址空间,则无法分配大于 4GB 的 block 。

关于c - 虚拟地址系统上的进程地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749868/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com