実行時のスタックの消費量を調べる 先日の記事では checkstack.pl を用いて個々の関数がどのくらいスタックを消費するか調べる方法を紹介しました。今回は、実行時の実際のスタック消費量を調べてみます。 以下のコードでは次のような方法でスタックの消費量を調べます。x86_32 の Linux 用です。 最初に max_num_pages 分だけスタックを伸ばす 伸ばした分をすべて mprotect でアクセス不能にしてしまう SIGSEGV を拾って 1ページずつアクセス可能に設定する 最後に、何ページ使ったかを表示する このような処理を行う共有オブジェクトを作成して LD_PRELOAD してやれば、実行時のスタック消費量をページ単位で調べられるのではないか、という試みです。 #include <asm/page.h> #include <assert.h> #include <er