From: Martin Duerst Date: 2008-12-30T15:58:27+09:00 Subject: [ruby-dev:37660] Re: [Bug #943] Segmentation fault (cygwin) At 17:19 08/12/29, SASADA Koichi wrote: > ささだです. > >Martin Duerst wrote:: >> しかし、真っ平らなデータを読み込むだけでスタックがこんなに伸びる >> のはなぜでしょうか。上記のスクリプトを >> >> ruby -e 'puts "A=[]"; 0.upto(1000000) { puts "A<<[22, 55]" }' | ruby >> >> に直すと、時間がかかるものの、問題なく完成されます。 > > [e1, e2, ..., eN] というリテラルは,一度 e1, e2, ..., eN を全部スタッ >クに積んで,スタック上の値を利用して配列を作ります.そのため,スタック >オーバーフローになります. そのぐらいは想像が付きました。 > 上記例のように,空の配列を作って,それに push するように変更することも >可能ですが,それを出来るようにしたほうがいいですかねぇ.するにしても, >1.9.2 で命令追加ってことになると思いますが.そう変更したら,ちょっと速度 >が遅くなるってくらいかなぁ. こんなにでかい「定数」の配列はどのぐらい必要になるのかは分かりませんが、 「定数から追加に記述を変更してください。」と言う必要がでてくるのは 何となく逆のような気がする。まあ、1.9.2 とかの段階でじっくり考えた 方がいいと思います。 よろしくお願いします。 Martin. #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp