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

use*_*982 5 executable operating-system memory-segmentation

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

Ser*_* L. 9

这取决于两件事:

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

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

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

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


Dre*_*wen 7

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

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

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