程序可用的堆和堆栈的数量是多少,如何确定?它是依赖于编译器还是PC还是两者兼而有之?
答案 0 :(得分:1)
它取决于操作系统,硬件和其他正在运行的程序。您可以询问操作系统有关物理内存和交换空间的数量,但不了解程序实际可用的堆和堆栈数量。您的程序获得了自己的虚拟内存空间,但操作系统是否可以支持该空间中的所有分配只有在您尝试分配它时才能知道 - 如果没有内存可以支持它,则分配将失败。
答案 1 :(得分:1)
这是“无限的”:]。每个进程都会收到一个虚拟地址空间,该空间仅受CPU和OS实现的限制。如果CPU或OS为32位,则该过程可以处理~4GB的虚拟内存(即使您的PC中安装的RAM较少)。在64位CPU和64位操作系统上,当前实现将虚拟地址空间限制为48位,因此进程认为它可以使用高达256TB的内存。
操作系统将动态尝试保留与进程需要一样多的堆和堆栈空间。