2012-05-07

スタック領域のサイズを変更したりする ulimit

大きなサイズの配列を確保しようとして segmentation fault になった。
後輩だったか誰かの情報で ulimit が怪しいときいた。
これ:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230911/

使うのはたぶん
$ ulimit -a

$ ulimit -s unlimited (か、適当に大きめの数字)
だろうか。これで segmentation fault が解消すればいいんだが・・・。
⇒ 解決した。

よかった。が、何回か試しに設定を変えていたら、「許可されていない操作です」とか怒られた。


http://d.hatena.ne.jp/ymotongpoo/20080109/1199881689
とのこと。ssh をいじるのはなんか嫌なので放置。ログインしなおした。
最初から上げておくこともできるようだが、メンドイしとりあえずこれでいいや。

----
追記:
結局、
$ su -
してからの
# vim /etc/profile
に上限を(?)、
# vim /etc/bashrc
にデフォルト値を(?)書いている。
値はいずれも適当に大きめな値にしてる。
いまいちこれらの違いわかってないけど…。


Update 2014-10-06

https://software.intel.com/en-us/articles/intel-fortran-compiler-increased-stack-usage-of-80-or-higher-compilers-causes-segmentation-fault/

http://www.isus.jp/article/fortran-special/sigsegv-or-sigbus-errors/

あたりが参考になる。
ただし、後者のリンク先含め色々なところで unlimited にせよとあるが、それではダメだという経験があった。前者のリンク先には
Linux: The size of "unlimited" varies by Linux configuration, so you may need to specify a larger, specific number to ulimit (for example, 999999999).
とあるので、この経験則が裏付けられたようだ。大丈夫な場合もあるということにはなるが…。

No comments: