出典:/src/share/vm/runtime/stubRoutines.hpp
静的CallStubのcall_stub(){ CAST_TO_FN_PTR(CallStub、_call_stub_entry)を返します。 }
ここで、以下のように定義された/src/share/vm/runtime/utilities/globalDefinitions.hppファイルで定義されたCAST_TO_FN_PTRマクロ:
#define CAST_TO_FN_PTR(func_type、値)((func_type)(castable_address(値)))
call_stub機能マクロ置換し、展開した後、次の形式になります:
静的CallStubのcall_stub(){ リターン(CallStub)(castable_address(_call_stub_entry))。 }
/src/share/vm/runtime/stubRoutines.hppファイルで定義されてCallStub、次のように具体的に定義され:
//は、Javaへのコール のtypedef無効(* CallStub)( アドレスリンクを、 intptr_t *結果、 BasicTypeののresult_type、 方法*方法、 アドレスentry_point、 intptr_t *パラメータは、 size_of_parameters、int型 トラップ )。
タイプ、関数ポインタ上で定義されている、関数が宣言された8つの仮パラメータを指摘しました。
次のようにcall_stubで呼び出さcastable_address()関数()関数は、globalDefinitions.hppファイルに実装されています。
インラインaddress_wordのcastable_address(アドレスX){ 戻りaddress_word(X)。 }
次のようにaddress_word特定のカスタム型は、特定のglobalDefinitions.hppファイルで定義されています。
ポインタを保持する//符号なし整数 C ++のいくつかの実装を除い// 関数//リンクポインタ。 //はとにかく、このタイプに配置するこれらのいずれかが必要ありません。 uintptr_tをaddress_wordのtypedef。