Ответ 1
Единственное, что я могу сейчас подумать, это использовать getrlimit
для получения максимального размера стека, выделенного для вашего процесса. Следующее, что нужно сделать, это найти способ получения текущего размера стека. Я думал, что getrusage
- это путь, но после просмотра man
-страницы и нескольких сообщений на SO, кажется, что он больше не поддерживает эту особенность. Поэтому вам нужно найти другой способ. Я действительно верю, что Valgrind
также сообщает об использовании стека, поэтому, глядя в его исходный код, документация может оказаться полезной.
Как только вы сможете получить текущий размер стека, вы можете измерить
-
его начальное состояние перед началом рекурсии (чтобы вы могли исключить это из своих вычислений, поскольку оно не имеет ничего общего с самой рекурсией)
-
его изменение для одной итерации
Исключая исходное распределение стека вместе с использованием общего размера стека и распределения, необходимого для одного этапа рекурсии, вы должны иметь возможность аппроксимировать количество рекурсий, которые вы можете иметь для данной системы. Я не уверен, что он будет работать, а также такие измерения, даже если они точны сильно зависят от используемой вами системы (ведь весь стек тесно связан с объемом виртуальной памяти, который может иметь процесс).