如果您没有读取值而是指定值
例如
int array[] = new int[5];
for(int i =0; i < array.length(); i++){
array[i] = 2;
}
数组仍然进入缓存吗? cpu不能将数组元素逐个引入其寄存器并执行赋值,然后将更新后的值写入主内存,通过缓存来缓存,因为在这种情况下不需要吗?
答案 0 :(得分:1)
答案取决于我回答的缓存协议,假设回写写分配。
数组仍将进入缓存,它会产生影响。从中检索缓存块时,不仅仅是单个内存位置(实际大小取决于缓存的设计)。因此,由于数组按顺序存储在存储器中,因此拉入数组[0]将拉动该块的其余部分,其中包括(至少一些)数组[1]数组[2]数组[3]和数组[4]。这意味着以下调用不必访问主内存。
在完成所有这些操作之后,不会立即将值写入内存(写回),而是CPU将继续使用缓存作为读/写的内存,直到从缓存中替换缓存块为止这些值将被写入主存储器。
总的来说,这比每次进入内存更可取,因为缓存速度更快,用户可能会使用他刚刚设置的内存。
如果协议是Write Through No Allocate,则它不会将块带入内存,而是直接进入主内存。