4バイトの自然な整列を仮定します。キャッシュにロード中のデータの整列
struct Node
{
int data;
char c_data;
};
int main() {
int global = 10;
struct Node N;
for (register int i = 0; i < 10; i++)
cout << global << N.data << endl; }
キャッシュラインサイズが16バイトと私のプログラムは、ループ内でこれらの2つの変数にアクセスしている場合、どのようにこれらの変数がキャッシュに存在するであろうがある場合は?他のすべてがレジスタ変数であると仮定します。
同じキャッシュ行にありますか?
オン異なるキャッシュライン?
同じキャッシュラインの場合、各メンバーはキャッシュ内で4バイトのアライメントされたアドレスから開始しますか?グローバル変数のようなものは[0,3]からスパンし、Nは[4,7]のスパンになります。または、構造体にcharがあった場合は、キャッシュラインの[5]から開始することもできます。
基本的には、キャッシュにデータをロードする際に、構造体のサイズに基づいて配置が考慮されるか、最初のメンバーですか?
データはデータサイズではなく、ラインサイズに基づいてキャッシュラインにロードされるため、メモリ内のデータ編成/アライメントはキャッシュに反映されます。 – LPs