GCC-4.6の stack-usageを使ってみた - syohex’s diary
とコールグラフを組み合わせて何かできないかなって思ったんだけど、
今のところ何もできませんでした。コールグラフの図だけ作ったので
勿体ないので貼っておきます。
ソース
coreutils-8.10を使いました。
ソースは src/{ls.c,ls-ls.c}です。
作り方
一旦coreutilsを作成してあとで個別にコンパイルします。
make時に自動生成するファイルがあり、lsのソースだけでは
ビルドできないためです。
% ./configure % make % cd src % gcc -std=c99 -g -pg -O2 -I. -fstack-usage -I../lib \ ls.c ls-ls.c ../lib/libcoreutils.a version.c -lrt
これで a.outができました。
コールグラフの作成
以下のコマンドで作りました。
% valgrind --tool=callgrind ./a.out -l # callgrind.out.PIDが生成される % kcachegrind callgrind.out.PID
kcachegrindから画像を得る方法は
Devel::NYTProfからコールグラフを生成する - syohex’s diary
を参照してください。
まとめ
fstack-usageとコールグラフを使って何かできるんじゃないって
思ったけど、今のところ何もできなかったので図だけ貼りました。
今回思ったのは、PC環境ではスタック使用量全体を把握するのは
難しいということです。やっぱりライブラリに依存している部分が
多いから、自分の書いた範囲はあんまりスタック使っていないと
しても、実はライブラリで使っているという場合にあんまり意味がなく
嬉しくないかなと。無意味では全然ないんですがね。
まあ PC環境だとメモリリークなんかはともかく、ローカル変数を
がっつり確保してもそこまで問題じゃないので、どちらかというと
組み込み向けの機能だと思いました。
gprofとかとうまく組み合わせられないかなというのは
引き続き考えようかと思います。