2016-12-08 4 views
3

Глупый вопрос, может быть, - но, что бы быстрее:Оптимизация связанный список

-Deleting элемент из связанного списка каждый раз, когда элемент ушел (независимо, что элемент может быть)

-Просто надписав записывать как мертвые и перезаписывать его после x количества времени или условий.

Могу ли я использовать меньше процессорного времени, избегая удаления и вставки, а не просто переписывания.

+0

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

+0

Проблема заключается не в количестве инструкций, а в фрагментарных ошибках кучи/страницы. – kay

+0

Используйте вектор: D – gowrath

ответ

0

Только способ выяснить, использовать профилировщик.

Имейте в виду, что есть другие факторы, которые очень важны, что вы не указали в своем вопросе. Например, имеет большое значение, если знает, какой элемент удалить, т. Е. У вас есть указатель на него, или если вам нужно перебрать связанный список, чтобы найти его. В этом случае вектор действительно может быть в несколько раз быстрее, чем любой связанный список (в зависимости от количества элементов) из-за кэширования.

+0

Я бы хотел, чтобы элемент был удален, но мне все равно пришлось бы перебирать список, чтобы найти его. Сейчас я читаю по векторам, но да, я обязательно проверю оба метода. Сказав, что для количества предметов, которые я собираюсь использовать, я сомневаюсь, что это будет иметь большое значение, но это было то, что я хотел знать для будущей справки. Благодарю. – poonam

0

Overwriting будет быстрее. Если удаление связано с освобождением выделенной памяти из кучи, то переписывание, безусловно, будет быстрее. Распределение памяти относительно медленное. Кроме того, со временем память вашего списка будет фрагментирована, что может привести к промахам в кеше. Даже освобождение памяти, которая возвращается в какой-то диспетчер памяти, будет медленнее, поскольку у вас есть накладные расходы на управление узлами списка.

+0

Да, я думал, что это будет очевидно, но, возможно, я кое-что пропустил. Я думаю, есть компромисс между просмотром списка и удалением их, но мой список никогда не будет очень большим (максимум 50, 100 наименований). Благодаря! – poonam

+0

из двух вариантов poonam дал, перезапись будет быстрее. Но, учитывая, что они сказали, что они будут часто перебирать список, я уверен, что вектор будет еще быстрее, если количество элементов не в миллионах. – Grisu47

+0

Хорошо, я буду профилировать оба. Спасибо Grisu47. – poonam

Смежные вопросы