Wed, Oct 14, 1998 at 11:12:03AM +0900 において
Yukihiro Matsumoto さん曰く:

> |のようにして受けます。このとき、qが最初のlineを指していること
> |が保証できるでしょうか?
> 
> できないですね.ちょっと考えただけでもふたつの点でまずいです.
> 
>   * 64ビットマシンではポインタサイズはintのサイズより大きい
> 
>   * FIXNUMは1bitフラグに使っているのでポインタよりも1bitサイ
>     ズが小さい

はーなるほど。前者は気付いてたんですが、後者は全然。

> しかし,前者はruby自身がlongとポインタサイズが等しいことを期
> 待してますから,rubyが動いてるマシンなら,longに変換すれば大
> 丈夫そうな気がします.LONG2NUM()やNUM2LONG()を使って下さいま
> せ.

わかりました。

> 後者はFIX系ではなくNUM系を使っているので問題ないか.でも,
> ruby自身がポインタが偶数アドレスにアラインされていることを期
> 待しているので,こうした方が効率良いかも知れません.
> 
>   return (VALUE)(((long)line) | FIXNUM_FLAG);
> >   q = (char*)(p & ~FIXNUM_FLAG);

ありがとうございます。これで当分シノがせていただきます。

-- 
人生を背負い投げ

菊谷 誠(Kikutani Makoto)  kikutani / sprintmail.com
                          kikutani / debian.or.jp (Linux関係のみ)