假设有很多程序同时运行 运行的每个可执行程序在RAM中是否有自己的代码,数据和堆栈段,或者是完整的RAM分为4个段,每个段都包含每个程序的相应段。
答案 0 :(得分:9)
这取决于两件事:
如果你在普通主流Linux,Windows,BSD上运行x86,那么
历史上,x86的设计具有支持分段内存的能力,但操作系统从未使用它,并且支持它最初是在AMD64中删除的。虽然最近的处理器再次支持它用于虚拟化和管理程序。 Userland应用程序通常在没有分段的情况下部署。
答案 1 :(得分:7)
简短回答:这取决于它运行的硬件和操作系统。
通常,每个进程都有自己的虚拟内存空间,让人觉得它看起来像是计算机上运行的唯一进程。该虚拟内存空间由操作系统划分为代码/数据/堆栈段(这些通常具有固定/公共地址)。
就物理RAM的使用而言,这完全取决于操作系统 - 它可以随意使用不同的RAM部分,程序甚至都不知道它。
答案 2 :(得分:0)
这个问题是特定于操作系统而不是特定于C的。
通常,操作系统维护每个进程的执行上下文,该进程保存堆栈和运行时标志,但是malloc
之类的内存如何分配在不同的系统之间。
有关详细信息,您可能希望深入研究malloc
documentation.