数组初始化操作也是缓存的

时间:2012-03-05 15:53:50

标签: caching memory

如果您没有读取值而是指定值

例如

int array[] = new int[5];

for(int i =0; i < array.length(); i++){
array[i] = 2; 
}

数组仍然进入缓存吗? cpu不能将数组元素逐个引入其寄存器并执行赋值,然后将更新后的值写入主内存,通过缓存来缓存,因为在这种情况下不需要吗?

1 个答案:

答案 0 :(得分:1)

答案取决于我回答的缓存协议,假设回写写分配。

数组仍将进入缓存,它会产生影响。从中检索缓存块时,不仅仅是单个内存位置(实际大小取决于缓存的设计)。因此,由于数组按顺序存储在存储器中,因此拉入数组[0]将拉动该块的其余部分,其中包括(至少一些)数组[1]数组[2]数组[3]和数组[4]。这意味着以下调用不必访问主内存。

在完成所有这些操作之后,不会立即将值写入内存(写回),而是CPU将继续使用缓存作为读/写的内存,直到从缓存中替换缓存块为止这些值将被写入主存储器。

总的来说,这比每次进入内存更可取,因为缓存速度更快,用户可能会使用他刚刚设置的内存。

如果协议是Write Through No Allocate,则它不会将块带入内存,而是直接进入主内存。