Там далеко слишком много процессоров вне там, чтобы сделать общее предположение об этом, но:
Если вы, скажем, на общей архитектуре x86, то, что кэш будет содержать всегда кратны размер кеш-линии, содержащий первый адрес, к которому вы обращались, что привело к пропуску кеша, то же самое для прямого доступа.
В зависимости от того, насколько сложным будет предсказание доступа к памяти, обратный доступ также может быть предварительно запрограммирован; кто делает это предсказание, зависит от вашей архитектуры процессора, фактической реализации ЦП и вашего компилятора. Для компиляторов нередко «знать», какие шаблоны доступа к памяти хорошо работают для данного поколения ЦП и обеспечивают доступ к памяти в этом порядке.
Для вашего арифметического случая может быть даже, например, автоматическое обнаружение четырех последовательных, выровненных адресов, к которым осуществляется доступ, и автоматическая векторизация с помощью инструкций SIMD, поддерживаемых вашим процессором. Это также влияет на выравнивание с использованием ОЗУ, что может иметь еще большее влияние на поведение кэша.
Кроме того, поскольку вы, похоже, заботитесь о скорости, вы, как правило, можете оптимизировать свой компилятор. Во многих случаях это приведет к тому, что такие циклы станут «отмененными», и SIMD'ed, даже.
Обратите внимание, что для других архитектур это может работать по-другому: например, есть печально известное семейство процессоров Motorola в середине 90-х годов, которые имели относительно простой модуль генерации адресов, и такие вещи, как доступ к памяти назад, были возможны быстро, если вы (или ваш компилятор C) знал, как сказать ему работать в обратном направлении; тогда появилась возможность «сплавить» загрузку памяти или сохранить ее с любой другой инструкцией CPU, так что в этом случае ваше кэширование будет эффективно доминировать в том, как вы вручную указали шаблоны доступа к памяти.
Вам все равно. Исключение для производительности, кэш CPU прозрачен для программ. –
Работа с кешем с строками 32 или 64 и т. Д. (Зависит от оборудования). и, возможно, с гранулярностью памяти, поэтому сначала воспользуйтесь любым блоком памяти байта (n-байтами) в строку кэша – oklas
Если вы поместите 'int array [1000];' он будет в стеке, который является частью памяти, которая повторно используется так много раз, так что это скорее всего в кеше. Если вы беспокоитесь о кеше, не используйте «новый», он, как правило, намного медленнее промаха в кэше. –