【发布时间】:2013-08-23 07:40:09
【问题描述】:
程序可用的堆和堆栈的数量是多少,我如何确定它?它是依赖于编译器还是 PC 或两者兼而有之?
【问题讨论】:
-
几乎取决于所有内容,包括操作系统和操作系统设置。如何确定它也取决于操作系统(如果可能的话)。因此,如果没有更多细节,您的问题无法真正回答。
标签: memory compiler-construction heap-memory stack-memory
程序可用的堆和堆栈的数量是多少,我如何确定它?它是依赖于编译器还是 PC 或两者兼而有之?
【问题讨论】:
标签: memory compiler-construction heap-memory stack-memory
它是“无限的”:]。每个进程都会收到一个虚拟地址空间,该地址空间仅受 CPU 和操作系统实现的限制。如果 CPU 或操作系统是 32 位的,则该进程有可能寻址约 4GB 的虚拟内存(即使您的 PC 中安装的 RAM 较少)。在 64 位 CPU 和 64 位操作系统上,当前实现将虚拟地址空间限制为 48 位,因此进程认为它最多可以使用 256TB 内存。
操作系统将根据进程的需要动态尝试保留尽可能多的堆和堆栈空间。
【讨论】:
它取决于操作系统、硬件和其他正在运行的程序。您可以向操作系统询问物理内存和交换空间的数量,但不能询问您的程序实际可用的堆和堆栈的数量。您的程序有自己的虚拟内存空间,但操作系统是否可以支持该空间中的所有分配,只有您尝试分配它才能知道 - 如果没有内存支持它,分配将失败。
【讨论】: