Единственное, что я могу думать прямо сейчас, чтобы использовать getrlimit
, чтобы получить максимальный размер стека, посвященный процесса. Следующее, что нужно сделать, это найти способ получения текущего размера стека. Я думал, что getrusage
это путь, но после того, как смотреть на man
-page и пару постов на SO не кажется, что она больше не поддерживает эту особенность. Поэтому вам нужно найти другой способ. Я полагаю, что Valgrind
также сообщает об использовании стека, поэтому он изучает исходный код, и документация может оказаться полезной.
После того, как вы можете получить текущий размер стека вы можете измерить
свое первоначальное состояние, прежде чем начать рекурсии (так что вы можете исключить это из ваших расчетов, так как она не имеет ничего делать с самой рекурсией)
его изменения для одной итерации
Без учета первоначального распределения стеки вместе с USI ng общий размер стека и распределение, необходимые для одного этапа рекурсии, вы должны иметь возможность аппроксимировать количество рекурсий, которые вы можете иметь для данной системы. Я не уверен, если он будет работать, а также такие измерения, даже если точны сильно зависят от системы, которую вы используете (после того, как все стек тесно связаны с количеством виртуальной памяти процесс может иметь).
Там нет ничего в 'C++ ', который определяет максимальную глубину. Максимальная глубина зависит от архитектуры процессора, деталей реализации конкретного компилятора и фактической функции, которая рекурсируется (вместе с дочерними функциями, которые она вызывает).Как и любая другая проблема, конечно, если вы знаете все параметры, вы можете определить решение .... но в этом случае, вероятно, гораздо проще просто выполнить явный вызов и посмотреть, что вы получаете. – mah
Хотя в '[temp.inst] есть абзац, в котором указано, что определенная величина реализована. – NathanOliver
Так что, если есть способ, чтобы проверить свободный размер стека для того, чтобы остановить рекурсию, когда она ниже указанного предела? – Jepessen