Как правило, вам нужно объединить информацию графа вызовов с файлами .su, сгенерированными -fstack-usage
, чтобы найти наиболее глубокое использование стека, начиная с определенной функции. Начиная с main()
или точки входа в поток, вы получите наихудшее использование для этого потока.
Полезно, чтобы работа по созданию такого инструмента была проделана для вас, как обсуждалось здесь , с использованием сценария Perl из здесь .
Компилятор armcc
ARM (используемый в Keil ARM-MDK) обладает этой функциональностью встроенной и может включать в себя подробный анализ стека в карте ссылок, включая путь вызова в худшем случае и предупреждения недетерминированное использование стека (например, из-за рекурсии).
По моему опыту, наблюдая за поведением нескольких компиляторов, стековый фрейм обычно определяется для времени жизни функции независимо от времени жизни и области применения объявленных переменных. Так что две версии в этом случае не будут отличаться. Без объявления их volatile
оптимизатор, вероятно, удалит оба массива в любом случае. Однако не следует полагаться на универсальность каких-либо наблюдений в этом отношении - это реализация, а не язык.