プログラムのテキストの右に、外部計算なしでスタック上の非再帰関数の要求を判別することは可能ですか?私は、AVRのような非常に小さなマイクロコントローラ内のスレッド用のメモリリソースを割り当てるためにこれを必要とします。関数呼び出しの前にこれを知る必要があります。指令--stack-usageは有益ではありませんが、残念なことにあるいは私は何かが分からないのですか?GCCで呼び出される関数のツリーに必要なスタックサイズを計算する方法
1
A
答えて
0
渡された引数のアドレスを取得すると、スタック上にその場所が得られます。したがって、これを実行している:
#include <stdio.h>
void my_fun(int dummy);
int get_stack_space(int dummy);
int main(void)
{
int dummy = 0;
my_fun(dummy);
return 0;
}
void my_fun(int dummy)
{
// do stuff
printf("%d\n", get_stack_space((int)&dummy));
return;
}
int get_stack_space(int dummy)
{
return dummy - (int)&dummy;
}
はmy_funを呼び出すのポイント間の積み重ねの上にあなたのバイト単位での距離を取得する必要があります()とget_stack_space()を呼び出します。それが役に立てば幸い。
編集:my_funの開始()がgccの中
+0
申し訳ありませんが、私は非常に詳細な質問はしていません。私は、AVRのような非常に小さなマイクロコントローラ内のスレッド用のメモリリソースを割り当てるためにこれを必要とします。関数呼び出しの前に知っておく必要があります。 – Vyacheslav
関連する問題
- 1. 要素の幅を計算する関数を呼び出すタイミングは?
- 2. fib(n)が呼び出された回数を計算する
- 3. PHPで必要なページ外の関数ページを呼び出すブロック方法
- 4. コンパイル時に定数パラメータでgcc optimize関数を呼び出す方法は?
- 5. Ajaxの成功関数が必要な命令で呼び出されない
- 6. Cコードの関数呼び出しツリーをファイルにダンプする方法は?
- 7. 要求がリダイレクトされる前に関数を呼び出す方法
- 8. 関数でラップされたAjax呼び出しの配列を実行する方法が必要です
- 9. EPPlusの式が呼び出さずに計算されない
- 10. 関数が呼び出されるたびに乱数を得る方法
- 11. GCC x64関数呼び出し
- 12. Javaで再帰呼び出しの数を計算する方法は?
- 13. ボタンクリック後のフィールド計算のためのJQuery関数の呼び出し方法?
- 14. 関数の呼び出しに使用されるコードメモリ(C ARM-GCC)
- 15. 純粋な関数呼び出しのツリーを単独でテストするには?
- 16. 呼び出される関数または変数の回数を計算する
- 17. React Jestその関数が呼び出されない方法
- 18. innerHTMLで呼び出されるJavascript関数でこれを呼び出す
- 19. Javascriptを必要とする:関数呼び出し/ args - ANTLR?
- 20. data.tableを呼び出す関数を呼び出す関数の記述方法?
- 21. react/reduxを使用して呼び出される最大スタックサイズ
- 22. 計算グラフの仮想関数呼び出しの回避
- 23. 時計から関数を呼び出す方法は?
- 24. Asp.Net - マスターページ - 不必要な呼び出しを避ける方法
- 25. Swift:ランダム関数を呼び出す関数を呼び出す方法は?
- 26. phpで呼び出された関数をファイルにインクルードする方法
- 27. 計算されたプロパティのゲッターが必要以上に呼び出されました
- 28. C++:関数呼び出しツリーを生成する
- 29. 必要に応じて関数を呼び出す
- 30. クラスメソッドが呼び出されるたびに計算を避ける
でEBPのプッシュのためのmy_fun()+マシンワードを呼び出すときに、戻りアドレスのプッシュのために距離+マシンワードを取得x86で-fstack-usageオプションです。各機能のスタック使用状況を報告します。https://gcc.gnu.org/onlinedocs/gnat_ugn/Static-Stack-Usage-Analysis.html。別の人がコールツリーのスタック使用量を計算するためのスクリプトを作成しました。https://github.com/PeterMcKinnis/WostCaseStack – MichaelMoser
@MichaelMoserはい、受信した値はネストされた呼び出しを考慮しません。 – Vyacheslav
私はコンパイラを進める方が良いと思った。 @マイケルモーザーマイケルに感謝します。 – Vyacheslav