実行時スタックサイズ変更 on Linux

週末、友達にプログラムについて質問されたときに気になったことを調査した。それは、Linuxでプログラム実行時に利用されるメモリ上のスタックサイズの1)確認方法、2)変更方法。
スタックサイズの確認の場合、bashを使っていれば、bash組み込みの「ulimit」コマンドで確認できる。

$ ulimit -a

スタックサイズのみを表示したければ次のように実行。

$ ulimit -s

僕の環境では、8192kBだった。


スタックサイズの変更の場合、これもulimitコマンドで行う。

$ ulimit -s 16384

ただし、有効になるのは、ulimitコマンドを実行したシェルの子プロセスでのみ。一端ログアウトしてしまうと、デフォルト値に戻ってしまう。あと、rootで

# ulimit -H

した値以上にはできない。例えば、スタックサイズが16384のときにrootが「ulimit -H」を実行すると、一般ユーザはその値より大きなスタックサイズを割り当てることはできない。


僕の環境だと、スタックサイズのデフォルト値は8192のよう。ulimitコマンドを使うと確かにスタックサイズが変更できる。だけど、ログアウトや再起動をすると、そのデフォルト値に戻ってしまう。デフォルト値の変更方法って無いのかな?/proc以下をいじって何とかできそうだけど、簡単に探してみたところ、それらしいオプションが見つからない。うーん、どうしたらいいんだろう。

ちなみに、ulimitコマンドはbash組み込みなので、マニュアルを見たい場合には、「man bash」してulimitで検索して見ることになる。tcshだと「limit」コマンドが同様なコマンドだとか。