自分のプログラムがどれくらいスタックを使っているのか。なかなか見積もりにくい。もう実測するしかねえ!と思いつつ、C言語でどうしたらいいのか。プロファイラーとか使えばできるのかもしれないけど、持ってないし。というわけで、簡単にやるには次のような関数を作っとく。
unsigned int minsp = 0xffffffff;
unsigned int max_stack(void)
{
unsigned int sp;
sp = (unsigned int)&sp;
minsp = min(sp, minsp);
return minsp;
}
で、どれくらいスタックを使っているのか知りたい場所でこれを呼ぶようにする。一番呼び出し階層が深そうなところとか。そうすると、max_stack関数内の自動変数spのアドレスが変わる。関数が呼ばれたときのスタックのトップ(あたり)にspが積まれるので、呼び出される度に最小のスタック位置を覚えておく。下記のように使う。
unsigned int minsp = 0xffffffff;
unsigned int max_stack(void)
{
unsigned int sp;
sp = (unsigned int)&sp;
minsp = min(sp, minsp);
return minsp;
}
void hoge(int a) {
max_statck();
}
int main(int argc, char *argv[]) {
unsigned int start;
unsinged int end;
minsp = 0xffffffff;
start = max_stack();
hoge(); // スタックを計りたい処理
end = max_stack();
printf("%d\n", (int)(start - end);
return 0;
}
まあ、厳密じゃない気がするけど、目安にはなるんじゃないかな。
以上
maxといいつつminなんだぜ