Структуры данных - память или хранилище? - PullRequest
0 голосов
/ 03 мая 2018

Когда мы говорим о структурах данных (например, массив), мы говорим о том, как данные хранятся в ОЗУ (смежные области памяти) или на жестком диске? Если это также относится к жесткому диску, чем физическая реализация отличается от ОЗУ?

1 Ответ

0 голосов
/ 03 мая 2018

Мы предпочитаем смежные области памяти. Причина становится очевидной, если мы посмотрим на аппаратном уровне.

CPU напрямую не взаимодействует с RAM , это происходит через CPU caches (часто делится на уровни, такие как L1, L2, L3 и т.д. с L1, являющимся самым маленьким и самым быстрым). Всякий раз, когда CPU хочет получить какие-либо данные, он отправляет запрос на L1, если не найден, L1 делегирует запрос на L2 и так далее (до жесткого диска), как показано на рисунке ниже:

enter image description here

Теперь, когда данные не найдены ни в одном кеше, мы называем это пропуском кеша. Чтобы уменьшить пропадание кеша, когда CPU хочет получить доступ к данным по адресу x в RAM , он будет получать не только данные по адресу x, но и окрестности адреса x (см. Рисунок ниже). Поскольку мы предполагаем, что «если на конкретную ячейку памяти ссылаются в определенное время, то вполне вероятно, что на ближайшую ячейку памяти будут ссылаться в ближайшем будущем (или локальная ссылка ).

enter image description here

Доступ к элементам массива обеспечивает последовательный доступ к данным и, таким образом, минимальное количество кеш-пропусков . Теперь вы можете визуализировать, почему массивы намного быстрее, чем структуры данных, такие как связанные списки, с точки зрения случайного / последовательного доступа к данным. То же самое относится и к другим структурам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...