为什么 Linux 堆栈大小限制在 64 位机器上如此低?

为什么 Linux 堆栈大小限制在 64 位机器上如此低?

据我所知,Linux 堆栈大小限制为 8 MB,但在 64 位计算机上,没有理由不能大幅增加,例如增加到 4 GB。这将使程序员基本上不用担心在堆栈上存储大值,或使用递归算法而不是迭代。

它也应该更快,因为堆栈分配比堆分配快得多。我们可以看到一类全新的堆栈分配数据结构 - 想象一下std::stack_vector<T>它在堆栈上分配。

有我没有看到的缺点吗?或者只是没有人足够关心去做出改变?

答案1

虽然限制堆栈大小最初可能是为了节省虚拟内存,但另一个好处是它可以捕获无限递归。需要真正深度递归的算法并不常见,因此如果您使用大量堆栈,则更可能是一个错误。当切换到 64 位架构时,这种情况的可能性并不会降低。

算法在 64 位模式下可能会使用更多的堆栈空间,因为某些数据类型较大,但可能不会太多以至于堆栈大小限制成为问题。

确实,这个限制还阻止了在堆栈上分配大型数组,这可能会更有效。但是修复这个问题是否足够重要以至于失去上面的无限递归检查?

相关内容