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

Operating system 每个程序在内存中都有自己的独立段(代码、堆栈、数据)吗?,operating-system,executable,memory-segmentation,Operating System,Executable,Memory Segmentation,假设有许多程序同时运行。 运行的每个可执行程序是否在RAM中都有自己的代码、数据和堆栈段,或者整个RAM分为4个段,每个段都包含每个程序的相应段。这取决于两件事: 您的部署架构 运行进程的操作系统 如果您在x86上运行的是通用主流Linux、Windows和BSD,那么 每个进程都有自己的私有虚拟RAM 所有段文本(代码)、堆、数据都位于相同的逻辑地址空间(虚拟RAM段) 从历史上看,x86的设计具有支持分段内存的能力,但操作系统从未使用过它,对它的支持最初是在AMD64中放弃的。尽管最

假设有许多程序同时运行。

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

这取决于两件事:

  • 您的部署架构
  • 运行进程的操作系统
如果您在x86上运行的是通用主流Linux、Windows和BSD,那么

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

从历史上看,x86的设计具有支持分段内存的能力,但操作系统从未使用过它,对它的支持最初是在AMD64中放弃的。尽管最近的处理器再次支持在虚拟化和虚拟机监控程序中使用它。如今,用户区应用程序的部署通常没有细分。

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

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


至于物理RAM的使用,这完全取决于操作系统-它可以随心所欲地使用RAM的不同部分,程序甚至不知道它。

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

一般来说,操作系统为每个进程维护一个执行上下文,其中包含堆栈和运行时标志,但是
malloc
之类的程序分配内存的方式因系统而异


有关更多信息,您可能希望深入研究

如何在硬件和操作系统中处理它,这取决于硬件和操作系统。但通常是的,每个进程都有自己的代码、堆、堆栈等。在中,所有进程都使用相同的内存。一般来说?拜托,我们不是说99.9%吗?除了共享内存等特殊的例外。一般来说,程序在运行时不能在自己的处理空间内对每个程序进行修改。我在阿波罗导航计算机上不做太多编程……这意味着每个程序都有一定的内存量,比如说100 MB,程序将100 MB的内存分为堆栈、数据、,代码段?@user1660982或多或少。目前,每个程序通常提供256TB的虚拟RAM(在原始状态下无法使用)。程序代码会自动放置在某个位置,请求内存的调用(
mmap
和family)会将新内存映射放置在该虚拟空间中尚未使用的任何位置。通常情况下,操作系统会决定新映射的放置位置,但您的程序可能会提示它想要映射的位置。您甚至可能会争辩说,每个程序“仅”提供了128TB的VRAM,因为内核将占用另一半,但这又取决于操作系统