【发布时间】:2020-10-02 17:21:27
【问题描述】:
我主要用 C++ 编程。我从很多地方看到我应该将大对象(如 10k 元素的数组)放在堆上(使用 new)而不是放在堆栈上(使用纯数组类型)。 我真的不明白。原因可能是因为滥用堆栈很多导致运行时堆栈溢出错误。但是操作系统为什么要为进程(或更准确地说,线程)的堆栈大小设置限制,因为虚拟内存可以根据需要(或实际上是 4G)变大。 谁能帮帮我,我真的不知道。
【问题讨论】:
-
没有一般限制。看看这个问题:stackoverflow.com/questions/1825964你为什么想要一个巨大的堆栈大小,你不应该需要它。递归并不常用,尤其是在堆栈中存储大量数据的情况下。
-
但操作系统为什么要为进程的堆栈大小设置限制 在 32 位应用程序中,堆栈空间量限制了线程数你可以在 Windows 上创建。使用 1MB 堆栈,您可以在用完整个 2GB 用户地址空间之前创建大约 2000 个线程。
-
这能回答你的问题吗? C/C++ maximum stack size of program
-
(使用新的) 在现代
c++代码中不鼓励使用new。 std::vector 更合适。 -
这是个好问题。但是以前有人问过;请阅读副本中的答案。