我尝试了很多方法,但没有一种程序可以确定堆栈的实际限制。虽然有方法可以检测堆栈溢出,但是找到实际限制的方法还没有被发现。
我尝试了很多方法,但没有一种程序可以确定堆栈的实际限制。虽然有方法可以检测堆栈溢出,但是找到实际限制的方法还没有被发现。
你说得对,确实没有一个好的方法来确定这个问题。但是:如果你使用了足够多的堆栈,以至于它变得重要,那么可能已经出现了很大的问题。
涉及堆栈溢出的两种常见情况:
Stack<T>
或 Queue<T>
作为占位符(假设这不是无意中出现的错误无限递归 - 这是一个非常常见的错误)stackalloc
(后者通常可以用 ArrayPool<T>
租赁替换,也许在检查非平凡负载大小后)关于后者,曾经有关于“给我一些范围,但让运行时根据大小和堆栈中剩余空间的数量决定是否使用 stackalloc 或租赁或隔离数组”的概念 API 的讨论,但是:迄今为止还没有实现。
此外,请注意使用大量的堆栈空间可能比您想象的更昂贵;尽管可能分配了大型堆栈,但这是虚拟内存,并且在第一次使用之前不一定需要实际内存;因此:计划使用大量堆栈空间可能会强制实际内存分配堆栈区域,这样就永远无法回收。因此,总结一下:不,实际上没有一个好的方法来做到这一点,但是如果您确实想要这样做,那么您可能正在做一些错误的事情。