2013-07-30 22 views
3

假设有很多程序在同一时间运行。
运行的每个可执行程序是否在RAM中有其自己的代码,数据和堆栈段,或者是整个RAM分成4个段,并且每个段都保存每个程序的相应段。每个程序在内存中都有其自己的分段段(代码,堆栈,数据)吗?

+0

如何它Hardware的处理和操作系统视,好了,硬件和操作系统的不同更多的信息。但通常是的,每个进程都有自己的代码,堆,堆栈等。 –

+0

在[Apollo引导计算机](http://en.wikipedia.org/wiki/Apollo_Guidance_Computer)中,所有进程都使用相同的内存。 –

+0

一般吗?来吧,我们不是在说99.9%吗?具有特定的例外情况,如共享内存等。一般来说,程序不能在每个处理空间运行的同时进行修改。 – Jiminion

回答

6

这取决于两个因素:

  • 您的部署架构
  • 您的操作系统,如果你是在x86上常见的主流的Linux,Windows上运行的运行您的程序

,BSD则

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

历史86被设计成具有的能力,以支持分段存储器,但操作系统从未使用它和对它的支持最初在AMD64中下降了。尽管最近的处理器再次支持它用于虚拟化和虚拟机管理程序。 Userland应用程序通常在今天不分割的情况下部署

+0

那么这意味着每个程序都有一定量的内存,例如100 MB,并且程序会将这100 MB划分为堆栈,数据和代码段? – user1660982

+0

@ user1660982或多或少。现在每个程序都有256TB的虚拟RAM(在原始状态下不可用)。程序代码自动放置在某处,并调用请求内存('mmap'和family)将您的新内存映射放置在尚未使用的虚拟空间中的任何位置。操作系统通常决定放置新映射的位置,但是您的程序可能会提示它想要的位置。 –

+0

你甚至可以争辩说,每个程序是“唯一的”给予128TB的VRAM,因为内核将占用另一半,但是这又是依赖于操作系统的 –

6

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

通常,每个进程都有自己的虚拟内存空间,为它似乎像在计算机上运行的唯一进程的假象。该虚拟内存空间被操作系统划分为代码/数据/堆栈段(这些通常具有固定/通用地址)。

至于物理内存的使用,这完全取决于操作系统 - 它可以使用的RAM不同的部分,因为它为所欲为,而节目甚至不知道这件事。

0

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

一般来说,操作系统在每个进程中维护一个执行上下文,该执行上下文包含堆栈和运行时标志,但是如何在不同系统之间分配malloc之类的内存。

为您不妨深入钻研的malloc documentation.

相关问题