next up previous contents index
Next: 例外的な処理 Up: コンパイルドコード Previous: 述語の原則

データのキャッシュ

プログラム実行上、アクセス頻度の高い大域変数は、 できるだけローカル変数にキャッシュしてからアクセスし、大域変数への アクセスはできるだけ少なくなるようにしている。 アクセス頻度の高いローカル変数は 最近のプロセッサ、コンパイラではレジスタに置かれる可能性が高く、 その結果、出力されるnativeな命令が単純になり、アクセスも高速化する。

特に、allocp(ヒープ割付点)、qp (ゴールスタック先頭)については留意されており、 通常にモジュール関数を実行している間には 殆んど大域変数への書き戻しなく実行される。

また、コンパイルドコードより、実行時ライブラリを呼び出す場合があり、 その実行時ライブラリ内でヒープ割付を行ったり、ゴールをエンキューしたり する時がある。 そのような実行時ライブラリについては、 naiveには上記のキャッシュされている値を大域変数に書きもどすか、 引数により値を渡し、戻り値、または大域変数経由で戻すようにする必要がある。 KLICでは、qp, allocp各々について以下のように対処している。



Sekita Daigo
1998-05-18