我已经尝试了很多方法,但是有方法可以找到何时发生堆栈溢出,但是没有确定堆栈实际限制的程序
您是对的;确实没有确定这一点的好方法。但是:如果您使用了足够多的堆栈来解决问题,某些事情可能已经很错误了。
有两种常见的涉及堆栈溢出的情况:
Stack<T>
或Queue<T>
作为占位符(假设它不是无缘无故的越野车无限递归,这是一个非常常见的错误)stackalloc
(后者通常可以用ArrayPool<T>
租约替换,也许在检查了非平凡的有效负载大小之后)关于后者,[已经围绕一个概念性API进行了讨论,以“给我某种类型的跨度,但是让运行时根据大小和大小决定是使用stackalloc还是使用租用或隔离数组。堆栈中剩余的空间量”,但:迄今为止尚未实现。
另外,请注意,使用大量堆栈空间可能比您想象的要昂贵;尽管可能会分配一个大堆栈,但这是virtual
内存,在第一次使用之前并不一定需要actual内存;因此:计划使用大量堆栈空间会强制actual分配堆栈区域的内存,因此永远无法回收。因此,再次总结一下:不,确实没有这样做的好方法,但是如果您愿意
,您可能做错了。