【发布时间】:2016-08-03 17:12:55
【问题描述】:
在下面的链接中,Sdaz MacSkibbons 给出的答案简要概述了虚拟地址系统上的进程地址空间。
What happens when a computer program runs?
现在假设每个进程都有 4GB 的虚拟地址空间。现在这是否意味着这个虚拟地址空间的顶部地址将获得堆栈部分(假设堆栈地址从 0 开始),底部的地址空间将分配给文本、数据、全局和堆。由于堆的大小发生变化,新的 malloc 分配是否会将虚拟地址空间页面直接映射到实际内存,或者他们是否检查先前分配给堆的虚拟地址页面是否空闲/可用。如果我们需要大量的堆内存,比如大于 4GB,那么进程如何支持呢?
提前致谢。
【问题讨论】:
-
取决于操作系统。使用带有 %p 的 printf 创建一个 C 程序,以打印出局部变量 (stacK) 的地址、分配的 (malloc()) 变量、静态变量的地址(程序数据)和函数的地址(函数指针), ... .部分虚拟地址空间用于操作系统。还有一些与每个正在运行的线程相关的数据(如 rand() 的种子值)(FS 或 GS 段寄存器可用于访问它,或者它可以映射到虚拟地址空间)。
标签: c memory-management operating-system virtual