Написание этого ответа, поскольку я не получил его даже после прочтения других ответов на этот вопрос, нескольких других вопросов и википедии (это более запутанно.)
Я думаю, что мы тратим много времени иэнергия, чтобы понять терминологию, которая немного запутана / сложна в этом случае.Мне было легче понять, когда я не обращал внимания на термины «пространственный» и «временный».
Давайте начнем с основ.
Давайте попробуем понять, что такое кеш - место, к которому доступ быстрее, чем к основной памяти.Это круто.Но это место ограничено и дорого, поэтому его нужно использовать с умом.Но как бы вы (или ОС) решили, что поместить в кеш, а что нет?Должен быть какой-то способ узнать, что нам нужно в будущем ... ах, будущие прогнозы!(Отчет меньшинства! Позвоните в несколько звонков?).
Должен быть какой-то способ определить, что понадобится программе в будущем.Используя здравый смысл и код, мы можем сказать, что некоторые части кода повторяются по своей природе - пример - циклы!Если внутри цикла есть переменная i, вы знаете, что к ней в ближайшем будущем снова и снова будут обращаться.Это принцип временной локализации.я могу быть введен в кэш, так как он временно локальный.
В другой области, если код использует какую-либо линейную структуру данных (например, массив) и это тоже в цикле с приращением индекса, легко заметить, что хотя текущая потребность только 3-яместоположение (например) этой структуры данных, очень скоро также потребуются следующие местоположения, потому что индекс увеличивается на 1 для этой линейной структуры данных.Так что было бы здорово, если бы мы вводили данные и в следующие несколько мест.Это принцип пространственной локации.Следующие несколько местоположений могут быть введены в кэш, поскольку они локально локальны.
Концепция локальности в основном состоит в том, чтобы идентифицировать данные и инструкции для внесения в кэш, чтобы мы могли уменьшить количество ошибок в кеше и эффективно использовать это специальное место.