C でコンパイル時に関数が必要とするスタックサイズを知り、出力する方法はありますか? これが私が知りたいことです:
いくつかの関数を取りましょう:
void foo(int a) {
char c[5];
char * s;
//do something
return;
}
この関数をコンパイルするときに、関数が呼び出されたときにどれだけのスタック スペースが消費されるかを知りたいです。これは、大きなバッファを隠している構造体のオン スタック宣言を検出するのに役立つ場合があります。
私はこのようなものを印刷するものを探しています:
ファイル foo.c : 関数 foo スタックの使用量はn
バイトです
それを知るために生成されたアセンブリを見ない方法はありますか? または、コンパイラに設定できる制限はありますか?
更新: 特定のプロセスのランタイム スタック オーバーフローを回避しようとしているわけではありません。コンパイラによって決定された関数スタックの使用がコンパイル プロセスの出力として利用可能かどうかを実行前に見つける方法を探しています。
別の言い方をすれば、関数にローカルなすべてのオブジェクトのサイズを知ることは可能ですか? 一部の変数は消えますが、上限は問題ないため、コンパイラの最適化は私の友人ではないと思います。