From: Yusuke ENDOH Date: 2008-04-22T23:36:28+09:00 Subject: [ruby-dev:34489] huge array allocation causes exit(1) in 64 bit environment 遠藤と申します。 64 bit 環境で大きなメモリを確保しようとすると、エラー表示もなく exit(1) するようです。 $ ./ruby -e '[1] * (2**32); p :foo' $ echo $? 1 いまいち何が起きているのかわかってないのですが、 - rb_memerror で th->raised_flag |= RAISED_NOMEMORY する - rb_longjmp で th->raised_flag & RAISED_EXCEPTION だったら FATAL する という流れで、RAISED_* が以下のように定義されているのですが、 これは意図的なものでしょうか。 enum { RAISED_EXCEPTION = 1, RAISED_STACKOVERFLOW, RAISED_NOMEMORY, }; フラグ用途なら、RAISED_NOMEMORY は 4 なのかな、と思いました。 Index: eval_intern.h =================================================================== --- eval_intern.h (revision 16157) +++ eval_intern.h (working copy) @@ -194,8 +194,8 @@ enum { RAISED_EXCEPTION = 1, - RAISED_STACKOVERFLOW, - RAISED_NOMEMORY, + RAISED_STACKOVERFLOW = 2, + RAISED_NOMEMORY = 4, }; int rb_thread_set_raised(rb_thread_t *th); int rb_thread_reset_raised(rb_thread_t *th); # にしても、FATAL の表示がないのは他にも何かバグがある? -- Yusuke ENDOH