caf*_*caf 26
堆栈通常受资源限制的限制.您可以使用ulimit -a
以下命令查看安装的默认设置:
stack size (kbytes, -s) 8192
Run Code Online (Sandbox Code Playgroud)
(这表明我的是8MB,这是巨大的).
如果删除或增加该限制,您仍然无法使用机器中的所有RAM作为堆栈 - 堆栈从进程地址空间顶部附近的点向下增长,并且在某些时候它将运行进入你的代码,堆或加载的库.
这在很大程度上取决于您使用的架构(32 位还是 64 位)以及您是否是多线程的。
默认情况下,在单线程进程中,即操作系统在 exec() 时创建的主线程,您的堆栈通常会增长,直到它遇到地址空间中的其他内容。这意味着通常可以在 32 位机器上拥有,比如说 1G 的堆栈。
但是,在多线程 32 位进程中绝对不是这种情况。在多线程进程中,堆栈共享地址空间,因此需要分配,因此它们通常会获得少量地址空间(例如 1M),以便可以在不耗尽地址空间的情况下创建许多线程。
因此,在多线程进程中,它是小而有限的,在单线程进程中,基本上直到您在地址空间中遇到其他东西(默认分配机制试图确保不会很快发生)。
在 64 位机器中,当然有更多的地址空间可以使用。
在任何情况下,您总是会耗尽虚拟内存,在这种情况下,您将获得 SIGBUS 或 SIGSEGV 或其他信息。