[#45467] 文字列から配列への変換について — "西塔伸一郎" <omohideporoporo@...>
いつもお世話になっております。
7 messages
2008/09/04
[#45484] volatileの付け方 — 谷垣 宏一 <co01@...>
co01と申します。
14 messages
2008/09/11
[#45486] Re: volatileの付け方
— Nobuyoshi Nakada <nobu@...>
2008/09/11
なかだです。
[#45501] マルチパートフォームデータのescapeHTML — 宮崎 詠二 <eiji@...21.com>
最近rubyのcgiをはじめたばかりのeijiと申します。
7 messages
2008/09/16
[ruby-list:45497] Re: _Re:_volatileの付け方
From:
arton <artonx@...>
Date:
2008-09-11 16:37:54 UTC
List:
ruby-list #45497
この質問についての回答がつかないようなので。 > ポインタに対して、 > > p_foo = (VALUE *)ALLOC_N(VALUE, len); > > p_foo[0] = rb_class_new_instance(...); > p_foo[1] = rb_class_new_instance(...); xmallocしたのはヒープなので自分でマークしなければだめだと思いました(う む、自信ないや)。 したがって、rubikitchさんが書かれた方法を兼用して、 volatile VALUE* pary = rb_ary_new... のようにすれば、スタック上(GCによって有効と判断される)のVALUE*に配列が 確保できるので安全です。ここで、volatileを付けないと最適化によっては、そ のコードの位置でスタックに積まれないのでGCされてしまう可能性があるのは、 ご想像の通りです。 ただ、誤解していたら申し訳ありませんが、次のようにしたほうが高速で、かつ 簡単という可能性はありませんか? 1. Rubyから拡張ライブラリが呼ばれる(引数はArrayなのかな?) 2. 普通にCのプログラムとして配列を作って(int配列かdouble配列かはわかり ませんが)、その配列に、Rubyから渡されたものをコピー(VALUEからintなどへ の変換は必要ですが)する。(引数はスタックに積まれるので問題なし) 普通にCのプログラムで計算する。(ここに時間がかかるのだと想定しています) 3. 計算が終わったら、Ruby用にVALUEへ変換しながら書き戻す。 数日計算するほどの量だと、仮にFIXNUMだとしても、Cで計算可能な型に直すに はビット演算(doubleだと関数呼び出し)が必要となるため、Cで書いてもそれ ほど効果があるかは疑問です。つまり、Cの中ではあまりVALUEを利用しないです ませるほうが、GCを気にしなくても構わないし、処理も高速だと思います。 -------------------------------------- Enjoy MLB with MAJOR.JP! Ichiro, Matsuzaka, Matsui, and more! http://pr.mail.yahoo.co.jp/mlb/