堆/堆栈和多个进程

时间:2009-12-23 10:37:05

标签: memory memory-management process

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

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

我想确认的是: - 1)我们是否有针对不同流程的单独堆栈?

2)我们是否有针对不同流程的单独堆?或者做不同的进程共享同一个堆?

3)正如我们所知,对于每个进程的32位操作系统,虚拟内存的大小为4GB。因此,对于每个具有4GB虚拟内存的进程,此4GB被分区进入堆,堆栈,文本,数据

感谢。

3 个答案:

答案 0 :(得分:5)

1)是的,每个进程都有自己的堆栈。

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

3)我认为你不会得到整个4GB。其中一些是为核心内容保留的。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在Java中还有其他一些限制要考虑,例如只能使用Integer.MAX_VALUE来寻址数组。在许多与内存相关的领域中,这限制了大约2GB。