这只是一个默认大小。如果您需要更多,您可以获得更多-通常是通过告诉链接器分配额外的堆栈空间。
拥有大型堆栈的缺点是,如果您创建许多线程,则每个线程都需要一个堆栈。如果所有堆栈都在分配多MB内存,但不使用它,则空间将被浪费。
你必须为你的程序找到适当的平衡。
有些人,比如@BJovke,认为虚拟内存本质上是免费的。你不需要让物理内存支持所有的虚拟内存,这是事实。你必须至少能够给虚拟内存分配地址。
然而,在典型的32位PC上,虚拟内存的大小与物理内存的大小是相同的-因为我们只有32位用于任何地址,无论是虚拟的还是非虚拟的。
因为进程中的所有线程共享相同的地址空间,所以它们必须在它们之间分配地址空间。在操作系统承担了它的一部分之后,应用程序“只剩下”2-3 GB空间。这个大小是物理内存和虚拟内存的限制,因为没有更多的地址了。