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