質問が少し一般的であることは知っていますが、すでに一般的な回答が必要です。だから私が理解しようとしているのは、オブジェクトのメンバー変数がメモリの観点からどのようにアクセスされるかということです。たとえば、そのオブジェクトでメソッドが呼び出されたときですか?
たとえば、私はこの単純なクラスを持っています。
class Hoo {
public int field;
// constructor, setters, getters
...
}
class Foo {
Hoo hoo;
void setHoo() {
hoo = new Hoo(...)
}
}
初期化される前であっても、ランタイムはhooのメモリアドレスをどのように把握しますか? 以下のコードにも同じことが当てはまります。
class Foo {
Hoo hoo = new Hoo();
void setHooField() {
hoo.field = 5;
}
}
ランタイムは、値を格納するためにここでフィールドのアドレスをどのように知るのでしょうか?
IMO、少なくともJavaの場合、これらの変数アドレスはクラスファイルのオフセットにマップされるため、このオフセットを渡されたオブジェクト参照に(仮想メソッドに)追加することで(仮想メモリ上の)正確な場所を把握できます。しかし、確かではありません...
何か案は?