間接スレッディング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/16 19:11 UTC 版)
「スレッデッドコード」の記事における「間接スレッディング」の解説
間接スレッディングでは、機械語コードを指すポインタのある場所へのポインタを使用する。間接ポインタの後には必要に応じてオペランドが続き、それによって間接ブロックを形成する。そうすることで、スレッド本体にオペランドが繰り返し出現するのを防ぐ。したがって間接スレッデッドコードは直接スレッデッドコードよりコンパクトになることが多いが、間接参照なので性能は低下するものの、それでもバイトコード・インタプリタより通常は高速である。ハンドラのオペランドが値と型からなる場合、直接スレッデッドコードからの領域節約効果は大きくなる。古いForthシステムは間接スレッデッドコードを生成するのが一般的だった。 例として "push A, push B, add" を実行する場合を挙げる。ここで ip は &thread というアドレスに初期化され、各コード断片(push、add)は ip からの二重間接で見つけられる。そして、各コード断片のオペランドのアドレスは、1段めの間接参照で得られる場所に、コード断片のアドレスに続いて置かれている。 thread: i_pushA: push: add: &i_pushA &push *sp++ = *(*ip + 1) *sp++ = *--sp + *--sp &i_pushB &A jump *(*ip++) jump *(*ip++) &i_add i_pushB: &push &B i_add: &add
※この「間接スレッディング」の解説は、「スレッデッドコード」の解説の一部です。
「間接スレッディング」を含む「スレッデッドコード」の記事については、「スレッデッドコード」の概要を参照ください。
- 間接スレッディングのページへのリンク