Есть ли способ узнать и вывести размер стека, необходимый функции во время компиляции в C? Вот что я хотел бы знать:
Возьмем некоторую функцию:
void foo(int a) {
char c[5];
char * s;
//do something
return;
}
При компиляции этой функции я хотел бы знать, сколько пространства стека оно будет потреблять, когда оно вызывается. Это может быть полезно для обнаружения декларации на стеке структуры, скрывающей большой буфер.
Я ищу что-то, что бы напечатать что-то вроде этого:
file foo.c: использование функции foo для стека n
bytes
Есть ли способ не смотреть на сгенерированную сборку, чтобы это знать? Или ограничение, которое может быть установлено для компилятора?
Обновление: я не пытаюсь избежать во время выполнения для данного процесса, я ищу способ найти до выполнения, если использование стека функций, как определено компилятором, доступно как результат компиляции процесс.
Иначе говоря, можно ли узнать размер всех объектов, локальных для функции? Я думаю, что оптимизация компилятора не будет моим другом, потому что какая-то переменная исчезнет, но верхний предел будет прекрасен.