6

假设有许多程序同时运行。
每个运行的可执行程序是否在 RAM 中都有自己的代码、数据和堆栈段,或者是完整的 RAM 分为 4 个段,每个段分别保存每个程序的段。

4

3 回答 3

11

这取决于两件事:

  • 您的部署架构
  • 运行您的进程的操作系统

如果您在常见的主流 Linux、Windows、BSD 上运行 x86,那么

  • 每个进程都有自己的私有虚拟 RAM
  • 所有段文本(代码)、堆、数据都在同一个逻辑地址空间(虚拟 RAM 段)

从历史上看,x86 被设计为能够支持分段内存,但操作系统从未使用过它,并且最初在 AMD64 中放弃了对它的支持。尽管最近的处理器再次支持它用于虚拟化和管理程序。如今,用户态应用程序通常在没有分段的情况下部署。

于 2013-07-30T13:41:01.473 回答
7

简短的回答:这取决于它运行的硬件和操作系统。

通常,每个进程都有自己的虚拟内存空间,给人一种感觉就像是计算机上唯一运行的进程。该虚拟内存空间被操作系统划分为代码/数据/堆栈段(这些通常具有固定/公共地址)。

至于物理 RAM 的使用,这完全取决于操作系统——它可以随意使用不同的 RAM 部分,而程序甚至都不知道它。

于 2013-07-30T13:41:18.647 回答
0

这个问题是特定于操作系统的,而不是特定于 C 的。

通常,操作系统为每个进程维护一个执行上下文,其中包含堆栈和运行时标志,但内存分配方式malloc因系统而异。

有关更多信息,您可能希望更深入地研究malloc文档。

于 2013-07-30T13:45:54.183 回答