Массивы и связанные списки: различия в производительности и сценарии приложений для доступа к памяти


Связанные списки имеют O(1) операций вставки и удаления, но в некоторых случаях это не важно. Прежде чем вставлять и удалять узлы, нам сначала нужно найти, куда вставлять или удалять. Если вы используете линейный алгоритм поиска, скорость поиска связанного списка будет намного медленнее, чем у массива. Хотя теоретически сложность времени поиска как связанного списка, так и массива составляет O (n), но в реальных сценариях эффективность связанного списка намного меньше, чем у массива.

Это связано с тем, что связанные списки не поддерживают кеширование. При обращении к массиву, благодаря принципу локальности, система будет предварительно считывать последующую непрерывную память в кеш, поэтому последующий доступ к элементам массива можно будет завершить в кеше L1. Но связанный список не имеет этой возможности, и каждый доступ к узлу требует доступа к памяти, а не к кешу.

Однако у массивов есть и недостатки, например, невозможность динамического расширения, одно расширение требует перемещения большого количества элементов и так далее. Поэтому при выборе использования массива или связанного списка следует выбирать в соответствии с конкретным сценарием.


dff9f09b1f380d0d0a54efd1735fc05b.jpeg

Так уж получилось, что у меня есть языковой пакет C здесь, личное сообщение мне, чтобы получить его

рекомендация

отblog.csdn.net/m0_67034740/article/details/129747397