2014-11-04 97 views
0

我想了解缓存内存如何读写。另外我正在试图确定命中率和命中率。我一遍又一遍地尝试阅读和阅读教科书“计算机系统 - 程序员的观点”,似乎无法理解这个想法。也许有人可以帮助我理解这一点:了解缓存内存

我正在使用一个具有480行640列的二维数组。高速缓存是直接映射的,具有4字节行的64 KB。下面是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; 
} 
} 

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

回答