假定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] ..类似的东西?或者如果结构只有一个字符,它甚至可以从缓存行中的[5]开始。
基本上,在将数据加载到缓存中时,根据结构的大小考虑对齐还是第一个成员?
根据行大小而不是数据大小将数据加载到缓存行中,因此,内存中的数据组织/对齐会反映到缓存中。 – LPs