0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 14
|
|||||||||||
1 | |||||||||||
Нужен совет в оптимизации кода18.09.2018, 23:48. Показов 1349. Ответов 10
Метки optimisation (Все метки)
Нужно оптимизировать метод Deallocate, который переводит нужный указатель из allotted в exempted, и, если указателя нет, бросает ошибку. Я сделал через find, но есть ли способ сделать это быстрее?
Ниже весь код:
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
18.09.2018, 23:48 | |
Ответы с готовыми решениями:
10
Нужен совет! Нужен совет: Нужен совет с Canvas Нужен совет по способу реализации игры в словарь |
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
||||||
19.09.2018, 00:07 | 2 | |||||
Например, взять другой контейнер с быстрым поиском, вместо дека. map set или что там ещё есть .
Добавлено через 1 минуту А если удалять без проверки существования например ?
А нет, там UB
0
|
0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 14
|
|
19.09.2018, 00:11 [ТС] | 3 |
Я бы попытался использовать другой контейнер, но методы Allocate и TryAllocate должны возвращать объекты в порядке FIFO, т.е. множество exempted объектов должно представлять собой очередь: методы [Try]Allocate должны извлекать объекты из её начала, а метод Deallocate должен помещать объект в её конец. Так что, как мне кажется, дек там лучше всего подойдет(queue не взял потому что у него нет degin и end).
0
|
Форумчанин
![]() ![]() 8183 / 5033 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
19.09.2018, 14:36 | 4 |
Vakarine, можно кешировать указатели в каком-нибудь std::unordered_set. То есть дополнительно хранить их в контейнере, предназначенном для поиска.
Однако, в любом случае надо сначала определить, является ли данный участок кода слабым местом. Вы профилировали? Добавлено через 2 минуты Плюс можно производить деаллоцирование кучками, то есть сначала помечать их "флагом протухания" или помещать в специальный контейнер, а в свободное для процессора время начинать процесс очистки. Тут всё уже от архитектуры зависит. Но, в любом случае, такие действия должны быть оправданы. Если у вас небольшое количество данных, то разницы в микросекундах не принесут профита. Как говорил дедушка Кнут, "Преждевременная оптимизация - корень всех бед".
0
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
19.09.2018, 17:21 | 5 |
boost::multi_index с sequenced и ordered индексами
0
|
0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 14
|
|
19.09.2018, 17:41 [ТС] | 6 |
MrGluck, Ну, там сложности я посчитал(в коде комментарии), и у Deallocate самая большая сложность, вот и предположил, что это он так время съедает.
0
|
15880 / 8643 / 2114
Регистрация: 30.01.2014
Сообщений: 14,871
|
|
19.09.2018, 18:42 | 7 |
Сделать интрузивный контейнер. Например список.
Тогда элемент сам будет знать своих соседей, и можно будет безопасно удалить его за O(1) без поиска вообще. Можно будет также совместить удаление и вставку в другой контейнер в одну операцию.
0
|
0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 14
|
|
19.09.2018, 18:50 [ТС] | 8 |
DrOffset, Список - это queue? Но там ведь нельзя найти нужный элемент т.к нету begin и end, да и из него не удалить элемент, который ты перенес в другой список, если он не первый.
0
|
15880 / 8643 / 2114
Регистрация: 30.01.2014
Сообщений: 14,871
|
|
19.09.2018, 18:53 | 9 |
Vakarine, queue - это очередь.
Список - это list. Но не тот, который std::, с ним будут те же проблемы с поиском. А сделать свой - интрузивный (тут вы берете и идете гуглить что это), или взять из boost::intrusive_containers.
0
|
0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 14
|
|
19.09.2018, 18:57 [ТС] | 10 |
Понятно, пойду пробовать, спасибо.
0
|
15880 / 8643 / 2114
Регистрация: 30.01.2014
Сообщений: 14,871
|
||||||
19.09.2018, 21:14 | 11 | |||||
![]() Решение
Vakarine,
С бустом примерчик быстро пишется (все умолчания оставил как были): Кликните здесь для просмотра всего текста
0
|
19.09.2018, 21:14 | |
Помогаю со студенческими работами здесь
11
Змейка. Нужен совет как доработать программу
Дайте совет по реорганизации и оптимизации исходника Научиться искусству оптимизации кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |