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