Ты прав; действительно, нет хорошего способа определить это. Но: если вы используете достаточно стека, чтобы это имело значение, что-то, вероятно, уже очень неправильно .
Существует два распространенных сценария ios, связанных с переполнением стека:
- рекурсия, которая обычно может быть заменена нерекурсивной l oop, иногда включающей
Stack<T>
или Queue<T>
в качестве заполнителя (при условии, что это не непреднамеренная ошибочная бесконечная рекурсия для веская причина - очень распространенная ошибка) - негабаритных локальных пользователей, в частности чрезмерное использование
stackalloc
для нетривиальных полезных нагрузок (последняя из которых часто может быть заменена арендой ArrayPool<T>
, возможно, после проверки на нетривиальный размер полезной нагрузки)
В последнем случае было обсуждение вокруг условного API для "дать мне некоторый промежуток времени, но пусть среда выполнения решит, стоит ли использовать stackallo c или аренду или изолированный массив, основанный на размере и объеме пространства, оставленного в стеке ", но: он не был реализован до настоящего времени.
Кроме того, обратите внимание что использование большого количества стекового пространства может быть дороже, чем вы думаете; хотя может быть выделен большой стек, это виртуальная память, и ей не обязательно требуется фактическая память, пока она не будет использована впервые; Итак: планирование использования большого количества стекового пространства может привести к фактическому распределению памяти в области стека, которое затем никогда не будет восстановлено.
Итак, подведем итог, еще раз: нет, нет действительно хороший способ сделать это, но если вы хотите , вы, вероятно, делаете что-то не так.