0

一般に、デスクトップには2種類のCPUキャッシュがあり、より高速なメモリアクセスが可能です。ヒープメモリアクセス用キャッシュ

1)命令キャッシュ - >実行可能命令の高速化。

2)データキャッシュ - >データのフェッチと格納を高速化します。

私の理解しているように、命令キャッシュはプログラムのコードセグメント上で動作し、データキャッシュはプログラムのデータセグメント上で動作します。これは正しいですか?

ヒープから割り当てられたメモリにキャッシュの利点はありませんか?ヒープメモリアクセスはデータキャッシュでカバーされていますか?

答えて

0

命令キャッシュはプログラムのコードセグメント上で動作し、データキャッシュはプログラムのデータセグメント上で動作します。これは正しいですか?

いいえ、CPUはセグメントについて認識していません。全て実行は、それらがコードセグメント、または動的に作成されたコードとしてヒープ内の内部で行われているかどうかにアクセスするための

命令キャッシュです。

データキャッシュは他のすべての場合、非実行アクセスです。データは、データセグメント、ヒープ、またはコードセグメント内でも定数として扱うことができます。

+0

あなたの応答はThanxです。データキャッシュについてさらに詳しく説明できますが、これは正確には何ですか? – Gopinath

+0

命令がメモリから何かを読み出そうとすると、命令はまずデータキャッシュをチェックします。与えられたアドレスの値がすでにキャッシュに入っていて、有効であれば、それは命令によって使用されます。命令が何かをメモリに書き込もうとすると、キャッシュ内の対応する値が更新または無効になります(無効とマークされます)。上記のすべては、アクセスされるメモリ領域に対して定義された* cache policy *に依存することがあります。 – Tsyvarev

0

私の理解しているように、命令キャッシュはプログラムのコードセグメント上で動作し、データキャッシュはプログラムのデータセグメント上で動作します。これは正しいですか?

ヒープから割り当てられたメモリにキャッシュの利点はありませんか?ヒープメモリアクセスはデータキャッシュでカバーされていますか?

メモリがメモリです。 CPUは、ヒープとデータの違いを認識できません。

命令キャッシュは、通常、プログラムカウンタのアドレスから開始し、次のNバイトを取得します。 CPUは、コードセグメントかデータセグメントかをまだ知ることができません。

0

プログラムを書くと、これは機械で読めるバイナリに変換されます。 CPUが命令を実行するとき、CPUはこのバイナリをフェッチし、デコードし、それが意味することを実行してから実行します。基本的に、このバイナリは、実行する必要のある命令をCPUに知らせます。このバイナリがメインメモリにのみ格納されていた場合、各フェッチ段階でCPUがメインメモリにアクセスする必要がありますが、これは本当に悪いことです。その代わりに、キャッシュの中のいくつかをCPUの近くに保存することです。このキャッシュは、実行される命令に関連するバイナリ情報しか含んでいないので、命令キャッシュと呼ぶ。これで命令はデータを操作する必要があります。あなたのハイレベルのコードでは、この命令は、命令キャッシュに格納されて

ADD memLocationStoredInRegisterA, memLocationStoredInRegisterB, memLocationStoredInRegisterC

に似た機械命令何かに変換されます arrayA[i] = (arrayB[i] + arrayC[i])のようなものを持っていますが、データ、すなわちarrayA、arrayBとarrayC意志かもしれませんメモリの別の部分に記憶される。この命令が実行されるたびに、メインメモリにアクセスすることは無駄になります。したがって、これを別のキャッシュに保存します。これをデータキャッシュと呼びます。

関連する問題