.net - .NET 中哪些因素导致堆栈溢出异常?

标签 .net stack-overflow

我有一个使用深度递归的算法。递归将进行多少层深度取决于输入。为避免堆栈溢出异常,我会计算深度并在特定深度处终止。

通过一些实验,我之前确定 500 水平是停止点。但是,现在我突然在 300 多级时遇到堆栈溢出异常。

谁能阐明哪些因素会对此产生影响?是不是例如中央处理器和内存?或者与计算机上正在运行的其他进程有关?

最佳答案

你得到一个 StackOverflowException当堆栈空间用完时。调用方法会使用一些堆栈空间(称为堆栈帧),就像在该函数期间使用的局部变量一样。递归会不断添加新的堆栈帧,而不会弹出旧的堆栈帧(除非您正在使用尾调用优化,而 C# 在这方面做得不太好)。

因此,具体发生时间取决于方法调用的次数以及您在这些方法中所做的事情。

关于.net - .NET 中哪些因素导致堆栈溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892215/

相关文章:

c# - 从类访问 C# 单例而不将其传递到类中

.net - 在单独的 .JSX 文件中引用组件

scala - 使用状态 monad 遍历时如何处理嵌套结构

java堆栈溢出错误?

java - 如何在 javafx 应用程序中使用 StackOverflow 询问按钮格式?

c++ - 给定 64 位虚拟地址空间,有什么理由不在堆栈上声明 32KB 数组?

.net - 如何在 Visual Studio 之外启动 WCF 服务?

.net - 如何运行代理 POCO?

c# - LINQ 查询查询具有数组成员的列表

c++ - 从析构函数内部调用 delete 会导致堆栈溢出吗?