Почему этот код генерирует попадание в кэш много раз?

Я понимаю концепцию попадания в кэш, но почему-то я не понимаю ее в примерах кода. Следующий код должен генерировать много хитов, но почему? В какой части мы это видим? Как нам теперь, когда этот код будет находить большую часть времени данные в кеше?

char array[1000]; 
for ( int i=0; i<1000; i++ ){ 
printf("%d ", array[i]); 
}

1 ответ

Решение

Данный код является прекрасным примером пространственной привязки, потому что array[i] доступ к нему осуществляется непрерывно и вперед. Согласно Википедии:

Пространственная местность

Если на конкретное место хранения ссылаются в определенное время, то вполне вероятно, что на близлежащие места памяти будут ссылаться в ближайшем будущем. В этом случае принято пытаться угадать размер и форму области вокруг текущей привязки, для которой стоит подготовить более быстрый доступ.

Вы также можете отметить, что i переменная показывает временную локальность, и в этом случае вполне вероятно, что она будет помещена путем оптимизации компилятора в регистр процессора.

Другие вопросы по тегам