Memory 堆/堆栈和多进程

Memory 堆/堆栈和多进程,memory,memory-management,process,Memory,Memory Management,Process,假设我有两个进程p1,p2作为应用程序的一部分运行 假设p1正在运行,首先执行函数f1(),然后f1()调用f2()。调用f2()后,进程p2开始执行 我想确认的是:- 1) 对于不同的过程,我们是否有单独的堆栈 2) 对于不同的进程,我们是否有单独的堆?或者不同的进程共享同一堆 3) 正如我们所知,对于32位操作系统,每个进程的虚拟内存大小都是4GB。对于每个拥有4GB虚拟内存的进程,4GB被划分为堆、堆栈、文本和数据 谢谢。 进程的虚拟内存将 与其他工艺不同 每个进程将获得4GB的虚拟内存

假设我有两个进程p1,p2作为应用程序的一部分运行

假设p1正在运行,首先执行函数f1(),然后f1()调用f2()。调用f2()后,进程p2开始执行

我想确认的是:- 1) 对于不同的过程,我们是否有单独的堆栈

2) 对于不同的进程,我们是否有单独的堆?或者不同的进程共享同一堆

3) 正如我们所知,对于32位操作系统,每个进程的虚拟内存大小都是4GB。对于每个拥有4GB虚拟内存的进程,4GB被划分为堆、堆栈、文本和数据

谢谢。

  • 进程的虚拟内存将 与其他工艺不同
  • 每个进程将获得4GB的虚拟内存 地址空间(在32位窗口中) 机器)并且您可以使用 2GB的用户空间(剩余空间用于 内核)。用于堆栈、堆、静态数据存储,甚至加载DLL。(如果使用大地址空间,则为3GB)
  • 每个进程都会得到单独的堆, 堆栈独立于其他进程
  • 是的,每个进程都有自己的堆栈

    2) 是的,每个进程都有自己的堆


    3) 我认为你没有得到全部4GB。其中有些是为内核的东西保留的。

    java中还有其他的局限性,比如只能使用整数。这在许多与内存相关的领域将您限制在2GB左右。

    正如Kaizen指出的那样,32位操作系统有4GB(因为2^32?),这是否意味着每个进程都有4GB(减去保留内容)?操作系统是如何处理的?(1)是的,独立的堆栈——因为它需要切换上下文(进程),以便在一台机器上运行多个程序,并且所有进程都可以使用可能的最大内存(在将某些内容放弃给操作系统之后)(2)是的,独立的堆——因为每个人都需要一个可能的最大内存(3)而不是整个4GB(在32位机器中)。这就是虚拟内存概念的由来。因为每个人都需要操作系统支持,32位地址空间之外,有些人必须寻找操作系统代码和数据。