根据我的理解,当一个进程正在执行时,它有一定的内存可供处理。 随着堆栈大小的增加,它从进程的一端build立(不考虑堆栈之前的全局variables),而堆从另一端build立。 如果你继续添加堆栈或堆,最终所有的内存都将用完这个过程。
如何确定进程的内存量? 我只能想象它取决于一堆不同的variables,但一般尽可能的反应会很好。 如果事情必须具体说明,我对使用C ++编写的linux进程感兴趣。
在您遇到的大多数平台上,Linux将启用虚拟内存。 这意味着每个进程都有自己的虚拟地址空间,其大小仅由硬件和内核配置方式决定。
例如,在具有“3/1”拆分配置的x86架构上, 每个用户空间进程都有3GB可用的地址空间,在这个空间内分配堆和堆栈。 这与系统中有多少物理内存无关。 在x86-64架构上,每个用户空间进程通常可以使用128TB的地址空间。
物理内存是分开分配的以支持该虚拟内存。 一个进程可用的数量取决于系统的配置,但是一般来说,它只是简单地提供“按需” – 主要限制了多少物理内存和交换文件空间的存在,以及目前有多少用于其他目的。
堆栈不会奇迹般地增长。 它的大小是静态的,大小是在链接时确定的。 所以当你从堆栈中获得足够的空间时,它会溢出(堆栈溢出;)
另一方面,堆区“神奇地”增长。 这意味着当堆需要更多的内存时,程序会要求操作系统提供更多的内存。
编辑:正如Mat下面指出的,堆栈实际上可以在运行时增加现代操作系统。