每个程序在内存中都有自己独立的段(代码,堆栈,数据)吗?

时间:2013-07-30 13:37:50

标签: operating-system executable memory-segmentation

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

3 个答案:

答案 0 :(得分:9)

这取决于两件事:

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

如果你在普通主流Linux,Windows,BSD上运行x86,那么

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

历史上,x86的设计具有支持分段内存的能力,但操作系统从未使用它,并且支持它最初是在AMD64中删除的。虽然最近的处理器再次支持它用于虚拟化和管理程序。 Userland应用程序通常在没有分段的情况下部署。

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:0)

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

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

有关详细信息,您可能希望深入研究malloc documentation.