【问题标题】:how to check the size of the stack memory using a program in c#如何使用c#中的程序检查堆栈内存的大小
【发布时间】:2020-04-27 00:28:09
【问题描述】:

我尝试了很多方法,但是有办法找到何时发生堆栈溢出,但没有程序确定堆栈的实际限制

【问题讨论】:

  • 在 Visual Studio 中,“调用堆栈”窗口在哪里。如果遇到断点,您可以随时检查调用顺序。

标签: c# memory stack limit stack-overflow


【解决方案1】:

你是对的;确实没有很好的方法来确定这一点。但是:如果您使用了足够多的堆栈来解决问题,可能已经非常错误了

有两种常见的涉及堆栈溢出的场景:

  • recursion,通常可以用非递归循环代替,有时涉及Stack<T>Queue<T> 作为占位符(假设它不是无缘无故的错误无限递归 - 很常见错误)
  • 本地人过大,特别是过度使用stackalloc 处理非平凡有效负载(后者通常可以替换为ArrayPool<T> 租约,可能在检查非平凡有效负载大小之后)

关于后者,已经围绕一个概念 API 进行了讨论,用于“给我某种跨度,但让运行时根据基于关于堆栈中剩余空间的大小和数量”,但是:迄今为止尚未实施。

另外,请注意,使用大量堆栈空间可能比您想象的更昂贵;尽管可能会分配一个大堆栈,但这是虚拟内存,在第一次使用之前不一定需要实际内存;所以:计划使用大量堆栈空间可能会强制堆栈区域的实际内存分配,然后永远无法回收。

所以再次总结一下:不,没有真正的好方法可以做到这一点,但是如果你想要它,你可能做错了什么。

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 2011-02-23
    • 2015-02-13
    • 2010-12-22
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多