在 for 循环的每次迭代中缓存数据

Caching data in each iteration of a for loop

例如,我有以下for循环:

for (int i = 0; i < 5; i++){
    for (int j = 0; j < 5; j++){
        int a = i + j;
    }
}

每次迭代中 i 的值存储在哪里?它是否自动存储在缓存中?

C 语言是由 C 标准指定的,使用的是一台假想的计算机,它确实执行 C 标准中描述的事情。在这个抽象计算机中,用int i = 0定义i,在内存中保留一些字节来保存i的值。在整个循环中,i 的值都在该内存中。这个抽象计算机没有指定缓存,只是某种没有物理描述的内存。

当编译器将 C 程序翻译成汇编语言时,C 标准允许编译器创建任何汇编语言,以产生与抽象计算机相同的可观察结果。在翻译后的程序中,i 的值可能在内存中,它可能在处理器寄存器中,或者如果编译器想出一种方法来计算相同的结果而不使用 i。如果它在内存中,处理器也可能将其存储在缓存中。在大多数情况下,处理器会自动从内存中缓存数据,而无需程序的直接干预。