Понятно, что расчёты стека по указателям не провести. Я хотел узнать о простых возможностях. Статический анализ кода (cflow) это примитив, вообще не дающий понимания о ресурсах, которые будет жрать CRT или окружение С++, в случае работы над готовым elf файлом с имеющейся отладочной информацией возможно понимание ресурсов для CRT.
А так, для грубой оценки, я поставил точки останова на мои вызовы системных функций для работы newlib, и смотрю глубину стека, очень наглядно при начальной инициализации (вызов конструкторов) или выдачи файлов (первое использование std::cout). Невозможно оценить необходимый стек для форматированного вывода, даже на глаз. Только экспериментально, при использовании GCC, к сожалению.
>И большинство функций ведь, в среднем на большом объёме кода, все примерно одинаковый объём стек отъедают.
Категорически не согласен. Многие мои задачи небольшие, и лишь несколько вызывают "тяжелые" функции Си. Соответственно, ручное определение вызовов по указателям и прописывание этой цепочки в батнике даёт 100% точный результат. Ну и следующая подстройка стека.
Хорошо, что в FreeRTOS есть функция анализа максимального использования стека для каждой задачи. Сильно облегчает задачу определения необходимого стека, но с невозможностью покрытия всего кода. То есть если создать условия, позволяющие програть программу по всем веткам, то будет тоже 100% результат.
Вообще, в кейле, мульте и сиэсэс есть понятия "покрытие кода", для этого нужна аппаратная поддержка трассировки (ETB и соответствующий отладчик, или XDS560+тоже макроячейка трассировки). Тогда среда сама покажет, сколько раз был заход в функцию, сколько времени она отожрала, какой код выполнился. Это всё в рилтайме, без какого-либо использования ЦПУ. Я имел удовольствие попользоваться трассировщиком Keil ULNK PRO + LPC1768 (при включении ETB), оно стоит запрашиваемых килобаксов, при серьёзной разработке.
GCC такого и не снилось. Знаю, что GDB делает какие-то потуги работать с трассировкой данных, но как-то это несистемно, должна быть одна связка компилятор+отладчик+трассировщик+среда.