2017-01-29 15 views
1

キャッシュラインのサイズが64バイトで、オブジェクトのサイズが64バイトであるとします。このオブジェクトがアクセスされた場合、それは次のようになります。キャッシュにロードされたデータがキャッシュラインサイズに揃っていますか?

  1. すべてのオブジェクトは、オブジェクトの開始と64バイトの次の倍数間の部分だけが
  2. をロードされる1つのキャッシュライン
  3. になりますロード二つの異なるキャッシュライン
  4. にロードすることが

何か他のもの、私は答えはプロセッサにプロセッサと異なることを感じを持っていますが、最近のCPUの上で最も起こりそうな結果は何ですか?

答えて

1

機械命令レベルでは、上位レベルの言語で使用できるオブジェクトの概念が消えます。より高いレベルの割り当て操作によってメンバーにアクセスすることは、通常の読み取りおよび書き込みの指示に変換されます。したがって、ランタイムシステムまたは言語の仮想マシンがスマートであり、より高いレベルの言語がオブジェクトの任意のメンバーを読み取る場合、64バイトの位置合わせされたアドレスに、場合によってはより良いキャッシュ使用率を得るためにオブジェクトを割り当てることができます。 64バイトのアライメントされたアドレスのどこにいても、オブジェクト全体がキャッシュラインにロードされます(64バイトのアライメントされたアドレスに割り当てられているため)。ランタイムシステムがダムである場合、質問の中で述べたような状況(64バイトのオブジェクトと64バイトのキャッシュライン)を調べずに、プログラムのフローで要求されたオブジェクトを割り当てるだけであれば、オブジェクト、そのメンバの64バイト整列アドレスのデータがキャッシュにロードされます。したがって、後者の場合は、キャッシュラインを整列させるために特別なパディングがオブジェクトの前面または背面に配置されるように、ラッキーまたはコードを書く必要があります。

関連する問題