簡単な要約:x86-64モードでは、ジャンプはx86-32モードと同じくらい遅いですか?
x86プロセッサでは、ジャンプは次の3つのタイプに分類されます。
- 短く、PCオフセットは+/- 127バイト(2バイト命令)
- 近く、現在のセグメントを「ロールアラウンド」する+/- 32kオフセット(3バイト命令)
- どこにでもジャンプできるfar(5バイト命令)
プロセッサによって異なりますが、短いジャンプと近いジャンプには1〜2クロックサイクルかかりますが、遠いジャンプには50〜80クロックサイクルかかります。私がドキュメントを読んだところ、これは「現在のコードセグメントであるCSの外に出ている」ためです。
x86-64モードでは、コードセグメントは使用されません-セグメントは事実上常に0..無限大です。エルゴ、セグメントの外に出てもペナルティはないはずです。
したがって、質問:プロセッサがx86-64モードの場合、ファージャンプのクロックサイクル数は変化しますか?
関連するボーナスの質問:32ビットプロテクトモードで実行されているほとんどの* nixのようなオペレーティングシステムは、セグメントサイズを明示的に0..infinityに設定し、ページテーブル全体で線形->物理変換を管理します。彼らは遠い呼び出しの時間(より少ないクロックサイクル)の点でこれから利益を得ますか、それともサイズセグメントレジスタからの内部CPUレガシーが8086以来本当にペナルティでしたか?