Home > C言語 | Tips > 最大スタックを調べる

最大スタックを調べる

自分のプログラムがどれくらいスタックを使っているのか。なかなか見積もりにくい。もう実測するしかねえ!と思いつつ、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;
}

まあ、厳密じゃない気がするけど、目安にはなるんじゃないかな。

以上

Comments:1

コスミー 08-12-18 (木) 15:53

maxといいつつminなんだぜ

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=318
Listed below are links to weblogs that reference
最大スタックを調べる from コスミー報告書[社外秘]

Home > C言語 | Tips > 最大スタックを調べる

Search
Feeds
Meta
 合計:019093
 今日:0086 昨日:0146

Return to page top