Оптимизирует ли оптимизатор последовательное обращение к массиву ссылок?

Вопрос касается всех существующих языков программирования.

Когда мы идём по массиву последовательно, это работает максимально быстро благодаря кэшам CPU. Но допустим это массив ссылок/объектов/etc. Внутри цикла мы вначале берём ссылку последовательно, но сама ссылка может вести в рандомное место памяти. Если мы внутри итерации цикла обращаемся к значению по этой ссылке, получается, процессору придётся ждать, пока значение не будет получено из памяти (предполагается, что объём используемой памяти большой).

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

Вопрос: существуют ли компиляторы (в любых языках программирования), которые проводят такую оптимизацию? Либо же правда в том, что на самом деле оптимизация не требуется по каким-то причинам?

PS. Конечно же понятно, что даже если не оптимизирует, миллионов 100 обращений в секунду, думаю, процессор может сделать — редко это станет узким горлышком. Вопрос скорее из любопытства.
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы