【发布时间】:2020-04-27 00:28:09
【问题描述】:
我尝试了很多方法,但是有办法找到何时发生堆栈溢出,但没有程序确定堆栈的实际限制
【问题讨论】:
-
在 Visual Studio 中,“调用堆栈”窗口在哪里。如果遇到断点,您可以随时检查调用顺序。
标签: c# memory stack limit stack-overflow
我尝试了很多方法,但是有办法找到何时发生堆栈溢出,但没有程序确定堆栈的实际限制
【问题讨论】:
标签: c# memory stack limit stack-overflow
你是对的;确实没有很好的方法来确定这一点。但是:如果您使用了足够多的堆栈来解决问题,可能已经非常错误了。
有两种常见的涉及堆栈溢出的场景:
Stack<T> 或Queue<T> 作为占位符(假设它不是无缘无故的错误无限递归 - 很常见错误)stackalloc 处理非平凡有效负载(后者通常可以替换为ArrayPool<T> 租约,可能在检查非平凡有效负载大小之后)关于后者,已经围绕一个概念 API 进行了讨论,用于“给我某种跨度,但让运行时根据基于关于堆栈中剩余空间的大小和数量”,但是:迄今为止尚未实施。
另外,请注意,使用大量堆栈空间可能比您想象的更昂贵;尽管可能会分配一个大堆栈,但这是虚拟内存,在第一次使用之前不一定需要实际内存;所以:计划使用大量堆栈空间可能会强制堆栈区域的实际内存分配,然后永远无法回收。
所以再次总结一下:不,没有真正的好方法可以做到这一点,但是如果你想要它,你可能做错了什么。
【讨论】: