Я не уверен, как этот фрагмент кода ссылается на то же место в течение небольшого промежутка времени?
Как уже отмечалось, к переменной i
обращаются довольно часто, возьмем следующую строку кода в вашем примере:
a[i] = b[i] + c[i];
В этом примере a
, b
и c
все предположительно относятся к типам массивов, указывающим на разные области памяти (даже если смежные, все же разные); однако переменная i
равна read каждый раз, когда на нее ссылаются, чтобы затем определить местоположение массива для ссылки.
Думайте об этом так:
get i from memory and store value in register x.
get value of b + [value in register x] from memory, store in register b.
get i from memory and store value in register y
get value of c + [value in register y] from memory, store in register c.
get i from memory and store value in register z
add value of [register b] to value in [register c] and store in memory location a + [value in register z]
Оптимизирующий компилятор, скорее всего, увидит эту временную локальность и вместо этого сделает что-то похожее на следующее:
get i from memory and store value in register i.
get value of b + [value in register i] from memory, store in register b.
get value of c + [value in register i] from memory, store in register c.
add value of [register b] to value in [register c] and store in memory location a + [value in register i]
Таким образом, i
имеет временную близость между смежными ссылками.
Надеюсь, это поможет.