0

程序可用的堆和堆栈的数量是多少,我如何确定它?它是否依赖于编译器或 PC 或两者兼而有之?

4

2 回答 2

1

它取决于操作系统、硬件和其他正在运行的程序。您可以向操作系统询问物理内存和交换空间的数量,但不能询问您的程序实际可用的堆和堆栈的数量。你的程序有自己的虚拟内存空间,但是操作系统是否可以支持该空间中的所有分配只有在你尝试分配它时才能知道——如果没有内存支持它,分配将失败。

于 2013-08-23T07:43:46.560 回答
1

它是“无限的”:]。每个进程都会收到一个虚拟地址空间,该地址空间仅受 CPU 和操作系统实现的限制。如果 CPU 或操作系统是 32 位的,则该进程有可能寻址约 4GB 的虚拟内存(即使您的 PC 中安装的 RAM 较少)。在 64 位 CPU 和 64 位操作系统上,当前的实现将虚拟地址空间限制为 48 位,因此进程认为它最多可以使用 256TB 的内存。

操作系统将动态尝试保留进程需要的尽可能多的堆和堆栈空间。

于 2013-08-23T07:51:19.670 回答