Caching 理解高速缓存

Caching 理解高速缓存,caching,memory,Caching,Memory,我试图理解缓存是如何读写的。我还试图确定命中率和未命中率。我一次又一次地阅读教科书《计算机系统——程序员的观点》,但似乎无法理解这个观点。也许有人能帮我理解这一点: 我正在使用一个具有480行和640列的二维数组。缓存是直接映射的,具有64 KB的4字节行。以下是C代码: struct pixel { char r; char g; char b; char a; }; struct pixel buffer[480][640]; register int i, j; register char

我试图理解缓存是如何读写的。我还试图确定命中率和未命中率。我一次又一次地阅读教科书《计算机系统——程序员的观点》,但似乎无法理解这个观点。也许有人能帮我理解这一点:

我正在使用一个具有480行和640列的二维数组。缓存是直接映射的,具有64 KB的4字节行。以下是C代码:

struct pixel {
char r;
char g;
char b;
char a;
};
struct pixel buffer[480][640];
register int i, j;
register char *cptr;
register int *iptr;
sizeof(char)==1(表示数组中的索引每个由4个字节组成(如果我理解正确的话))。缓冲区从内存地址0开始,缓存最初为空(冷缓存)。唯一的内存访问是对数组项的访问。所有其他变量都存储在寄存器中

for (j=0; j < 640; j++) {
for (i=0; i < 480; i++){
buffer[i][j].r = 0;
buffer[i][j].g = 0;
buffer[i][j].b = 0;
buffer[i][j].a = 0;
}
}
(j=0;j<640;j++)的
{
对于(i=0;i<480;i++){
缓冲区[i][j].r=0;
缓冲区[i][j].g=0;
缓冲区[i][j].b=0;
缓冲区[i][j].a=0;
}
}

对于上面的代码,它正在将数组中的所有元素初始化为0,因此它必须正在写入。我可以看出这是不好的局部性,因为数组是逐列而不是逐行写入的。这不影响失分率吗?我试图根据缓存大小确定此代码的未命中率。我认为漏检率是100%,如果是一排一排的话,漏检率将是25%。但我并不完全理解缓存是如何工作的,所以。。。有谁能告诉我一些可以帮助我更好地理解这一点的东西吗?

如果你是初学者,我建议你观看整个教程。 但对于你的问题,第27课到第31课将解释一切


IISc班加罗尔。

非常感谢,我会:)Stackoverflow中的感谢是通过向上投票表示的;)