2011-09-11 16 views
3

'ベース' はJNAのJNAのPointer.getPointerArray(long base)とPointer.getStringArray(long base)の 'base'はどういう意味ですか?

Pointer.getPointerArray(long base) 
Pointer.getStringArray(long base) 

に何を意味するのでしょうか?

JNA Documentation for Pointerは、これが参照すると思われる「ベース」を説明しません。

テキストフォーマットのベースであれば、それはなぜgetPointerArrayにも渡されますか?

メモリアドレスのビット数を参照できますか?なぜそれが渡される必要があるのでしょうか(Java内であれば、それを理解することはできませんでしたが、どうすればいいでしょうか)

そして、将来のための準備? JNAプロジェクトは、メモリアドレスバスが1E19ビット幅の大規模なマシンを予見していますか?

すべてのビットが1に設定された状態で長くなっていますか?

ホストマシンのハードウェアベースを参照できますか?バイナリの場合は2以外の値にしてもかまいませんか?

オフセットになっていますか?

アレイの終了文字でもかまいませんか?終了文字が64ビットを超えるとどうなりますか? 64ビット未満の場合はどうなりますか?ポインタクラスのJNAのソースを掘り

答えて

1

Pointer.getPointerArray(long base) 
Pointer.getStringArray(long base) 

...明らかに一つのレジスタは、メモリアドレスしばらく保存なるアセンブラ/ハードウェアレベルで見出さbase+address memory addressing modesの文脈における「ベース」を参照第2のレジスタはそのアドレスへのオフセットを格納し、メモリアクセス中に自動的に合計される。理想的には、ポインタが「ベースアドレス」になり、メモリの内容を繰り返し処理するときに、「オフセット」アドレスを調整することになります。

基本的に'base'は 'offset'を意味しますこのコンテキストではポインタの位置の後に 'base'バイトから開始し、メモリのこれらの部分から読み取るアドレス位置に基づいてポインタ/ Stringオブジェクトを吐き出します。それはヌル値を見つける。私は 'base'という言葉が使われている理由は、メソッドが内部でコード化されている方法と関係があると推測します:

それ自身に基づいて2番目のPointerオブジェクトを作成しますが、 'base'次に、 'offset'というインデックス変数を作成します...そうです。次に、NULL値を読み取るまで、アドレス・ワード・サイズ(通常は8)で「オフセット」をインクリメントして反復します。

ローカル変数として既に 'offset'が使用されているため、offsetパラメータと衝突し、コーダがメソッドのオフセットパラメータ 'base'を指定しました。

関連する問題