【发布时间】:2017-05-04 07:13:01
【问题描述】:
假设自然对齐 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] 开始。
基本上,在将数据加载到缓存中时,是否根据结构的大小或它的第一个成员来考虑对齐?
【问题讨论】:
-
数据根据行大小而不是数据大小加载到缓存行中,因此内存中的数据组织/对齐反映到缓存中。
标签: c++ c caching memory-alignment