我經歷CSAPP的書,我不知道在高速性能方面以下兩個環路之間的區別:高速緩存性能
這裏緩存有2048字節,直接映射(行號爲1 ),並具有16字節的塊,並且我們定義下面的結構:
struct algae_position {
int x;
int y;
};
struct algae_position grid[16][16];
代碼1:
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_x += grid[i][j].x;
}
}
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_y += grid[i][j].y;
}
}
和代碼2:
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_x += grid[i][j].x;
total_y += grid[i][j].y;
}
}
我的想法:我們總是有小姐,命中,小姐,命中的模式,因爲一條線只能容納兩個網格元素。所以我們總是有50%的錯過率。
然而,根據這本書,代碼2將有25%的遺漏率,因爲緩存可以容納整個網格陣列。我應該如何理解這個問題?