В контексте аппаратной кеш-памяти, в которой обычно возникают эти понятия, анализ, как правило, не проводится на основе адреса памяти. Локальность анализируется по доступу к блокам памяти, которые передаются между кешем и основной памятью.
Если вы думаете об этом таким образом, ваш код имеет как временную, так и пространственную локальность. Когда ваш код читает some_array[0]
, если его адрес не найден в кеше, он читается из основной памяти, и весь содержащий его блок копируется в кеш. Он заменяет некоторый другой блок, следуя определенной политике: например, MRU.
Затем, когда вы получаете доступ к some_array[1]
через некоторое время, его блок уже находится в кеше, поэтому время чтения будет меньше. Обратите внимание, что вы получили доступ к тому же блоку, и в течение небольшого количества времени. Таким образом, у вас есть как пространственная, так и временная локализация.
Кэш-память использует пространственную и временную локальность для обеспечения более быстрого доступа к памяти. С другой стороны, может ли ваш код воспользоваться этим - это совсем другой вопрос. Тем не менее, компилятор выполнит большинство оптимизаций за вас, поэтому вам следует позаботиться об этом только после обнаружения узкого места в профильной сессии. В средах Linux отлично подходит Cachegrind .