Ответ 1
Ваше понимание дела массива в основном правильное. Если к массиву обращаются последовательно, многие процессоры будут не только извлекать блок, содержащий этот элемент, но также будут предварительно отбирать последующие блоки, чтобы свести к минимуму циклы, потраченные на ожидания промахов в кэше. Если вы используете процессор Intel x86, вы можете найти информацию об этом в оптимизации Intel x86 manual. Кроме того, если элементы массива достаточно малы, загрузка блока, содержащего элемент, означает, что следующий элемент, вероятно, находится в одном и том же блоке.
К сожалению, для связанных списков структура нагрузок непредсказуема с точки зрения процессора. Он не знает, что при загрузке элемента по адресу X следующий адрес будет содержимым (X + 8).
В качестве конкретного примера последовательность адресов загрузки для последовательного доступа к массиву хороша и предсказуема. Например, 1000, 1016, 1032, 1064 и т.д.
Для связанного списка это будет выглядеть так: 1000, 3048, 5040, 7888 и т.д. Очень трудно предсказать следующий адрес.