在 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
。如果它在内存中,处理器也可能将其存储在缓存中。在大多数情况下,处理器会自动从内存中缓存数据,而无需程序的直接干预。
例如,我有以下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
。如果它在内存中,处理器也可能将其存储在缓存中。在大多数情况下,处理器会自动从内存中缓存数据,而无需程序的直接干预。