2009-03-19 12 views

答えて

1

あなたは "ruby"の意味に依存します;)jrubyでは、私が知る限り、それは単なる一意の整数です。

また、数字のようなものはメモリの場所ではありません。私はすべての細部を忘れ、誰かがあなたにそれらを与えることを確かめる。

irb(main):020:0> 1.object_id 
=> 3 
irb(main):021:0> (2-1).object_id 
=> 3 
+1

Fixnumかのobject_idビットに格納されている左へとシフトされました最下位ビットがセットされています。http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 あなたの '(2-1)'は意味がありません。代わりに '(4711 >> 1).object_id' –

1

通常のルビー(MRI 1.8.xと1.9.x)では、それは単なる値です。

これは、多くのパラメータ、値、オブジェクトタイプ、メモリ内の場所の組み合わせでもIronRubyの

6

の場合です。
さらに読むことができますhere

4

これはメモリの場所を直接参照するものではなく、特定のRubyの実装に固有のものです。 Cコードを読むことができる場合は、Ruby 1.8.6ソースのgc.crb_obj_idid2refのメソッドを見るのが有益です。 Ruby Hacking Guide chapter 2の部分翻訳の「VALUEに埋め込まれたオブジェクト」セクションの「エンコーディング」についてさらに読むことができます。

+0

[MRIソースにリンク](http:// rxr。 whitequark.org/mri/source/gc.c#3158) –

3

それはあなたが使用してオブジェクトIDの逆引き参照を実行できることは注目に値します:たとえば

ObjectSpace._id2ref(object_id) 

を:

ObjectSpace._id2ref(0) #=> false 
ObjectSpace._id2ref(1) #=> 0 
ObjectSpace._id2ref(2) #=> true 
ObjectSpace._id2ref(3) #=> 1 
ObjectSpace._id2ref(4) #=> nil 
関連する問題