要約
ulimit
で表示される stack size
が unlimited
の場合,スレッドを使用するプログラムを実行する際には注意が必要.
有限値が設定されている場合,おそらく,各スレッドのスタックサイズはその値が使用される事になるだろう.
しかし, unlimited
の場合, スレッドのスタックサイズが小さい有限値 (2MiBとの事です.コメント頂きありがとうございます)に設定されてしまう可能性が有る.
ここで「小さい」と書いたのは,多くの場合においてスタックサイズのデフォルト値である8192KBよりも小さいという事を指している.
また,「可能性」なので,環境によっては問題が生じない事もあるだろう.
つまり,もしも小さく設定されてしまった場合, スタックオーバーフロー(SEGV
)が起き易くなるという事.
回避・解決手段はスタックサイズを適切な有限値に設定する事.
また, @angel_p_57 さんのコメントより,この現象に関するソースコードの該当部分(代入,定義)を教えて頂きました.
ありがとうございます.
実験
要点は上に書いたので,とりあえず公開する.
色々と見ているうちに,システムの情報や仕様,例外の対処関連の話が気になって来たので,備忘録も兼ねて再現実験をしようと思う.
今はたてこんでいるので,後でやる.
TODO
環境
TODO