1 | |||||||||||
resize or reserve07.07.2020, 11:07. Показов 2487. Ответов 39
Метки нет (Все метки)
Мое почтение, джентльмены.
Нужно быстро выделить буфер для работы с адресной арифметикой. И так, чтобы без ручного освобождения памяти. Был предложен след подход:
Вопрос знатокам:
Компилятор (VS2017) в режиме отладки ругается (обращение к не инициализированной строке), в релиз - все норм.
0
|
07.07.2020, 11:07 | |
Ответы с готовыми решениями:
39
Разница между resize и reserve QVector::reserve() + std::vector::reserve() и добавление в начало Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? Vector reserve |
07.07.2020, 16:54 [ТС] | 21 |
Алексей1153, после нескольких итераций malloc + free впереди (поправил пост), но отстаивание new небольшое.
Протестируете у себя? Добавлено через 1 минуту А вообще каждый раз разный результат, иногда new выигрывает. Вообщем разница небольшая у меня (VS2017)
0
|
фрилансер
5846 / 5377 / 1103
Регистрация: 11.10.2019
Сообщений: 14,376
|
||||||
07.07.2020, 17:14 | 22 | |||||
bedvit, вот тут я попробовал четыре варианта
GCC http://cpp.sh/6f2pu
new no init: 86231618 а вот тут https://wandbox.org/ то же самое выдало new no init: 70024303 в общем, экспериментатор с памятью из меня так себе Добавлено через 2 минуты upd по второй ссылке с включенной оптимизацией: new no init: 50182 а при повторе аж вообще вот так new no init: 49733
0
|
фрилансер
5846 / 5377 / 1103
Регистрация: 11.10.2019
Сообщений: 14,376
|
|
07.07.2020, 17:29 | 24 |
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
07.07.2020, 17:37 | 25 | |||||
Правильно, потому что бутерброд надо есть колбасой вниз ))
Т.е. нужен побочный эффект, чтобы не выкидывал. Например так:
1
|
фрилансер
5846 / 5377 / 1103
Регистрация: 11.10.2019
Сообщений: 14,376
|
|
07.07.2020, 17:38 | 26 |
DrOffset, да, wandbox подтверждает ) А первый сайт упал, не могу зайти туда
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
07.07.2020, 17:40 | 27 |
Алексей1153,
https://rextester.com/DJU13619 https://rextester.com/QDM23956 Можно кстати воочию увидеть насколько в linux лучше реализация malloc по умолчанию. Одна из самых производительных на стандартных задачах.
0
|
Undisputed
|
07.07.2020, 18:28
#28
|
Не по теме: думаю лучше на сайтиках не мерить производительность так как это чужая машина и мы не знаем что происходит на ней в момент наших эксперементов... может сложиться такая ситуация:
0
|
Croessmah
|
07.07.2020, 19:21
#29
|
Не по теме: Undisputed, такие тесты вообще бесполезно делать в отрыве от задачи и остального кода.
0
|
Undisputed
|
07.07.2020, 19:56
#30
|
Не по теме: Croessmah, интересно... а почему бесполезно? Ведь скажем если мы тестируем например два разных алгоритма которые решают одинаковую задачу, то разве более быстрый алгоритм на тестах не окажется более быстрым и в боевых условиях? говоря об этом я не принимаю во внимание сторонние эффекты которые зависят от окружающей среды, а речь чисто об оценке работы самого алгоритма...или я что то не так понял?
0
|
DrOffset
|
07.07.2020, 20:05
#31
|
0
|
Undisputed
|
07.07.2020, 20:36
#32
|
Не по теме: DrOffset, да, если скорость работы алгоритма зависит от данных... в таком случае причины сравнительных тормозов понятны, но так как это не уточнялось, я думал что речь идёт в том числе и о тех случаях когда скорость работы алгоритма независит от данных
0
|
Croessmah
|
07.07.2020, 20:42
#33
|
0
|
DrOffset
|
07.07.2020, 20:49
#34
|
Не по теме: Я полагаю, что она всегда зависит от данных, если данные вообще есть. * От характера данных, т.е. от самих значений. * От объема данных. * Даже от расположения в памяти данных может зависеть. Т.е. O-оценка алгоритма это хорошо, но по факту в это может вмешиваться множество разных факторов и буквально на практике перекраивать предварительные оценки. Поэтому профайлер - наш друг :)
0
|
Croessmah
|
07.07.2020, 20:59
#35
|
Не по теме: DrOffset, и еще от порядка работы, производимых до и после алгоритма операций, и, естественно, от параллельно работающих потоков.
0
|
Undisputed
|
07.07.2020, 21:09
#36
|
Не по теме:
0
|
DrOffset
|
07.07.2020, 21:13
#37
|
Не по теме: Undisputed, даже если не брать в расчет аппаратуру, средняя нагрузка на оптимальный казалось бы алгоритм в реальных условиях может быть выше или ниже протестированных условий и спрогнозированных ожиданий. Программисты очень часто ошибаются в этих вещах, поэтому лучше тестировать на реальной нагрузке.
0
|
Croessmah
|
07.07.2020, 21:19
#38
|
Не по теме: Ну вот ты потрогал - вернул, потрогал, вернул - быстро. А теперь в боевых условиях потрогал, вернул, снова трогаешь, а там уже кто-то другой её потрогал и уже не так быстро. Так сказать, в тесте работал с горячей памятью, а в боевых условиях память не прогрета и алгоритм ведет себя не так. К кешам это тоже относится. На одной машине алгоритм работает быстро, а на другой в кеш не залезает и работает медленнее. Или, например, всё работало хорошо, пока кто-то не переопределил способ аллокации памяти и, даже не трогая алгоритм, повлиял на его работу. Так что алгоритмы нужно тестировать именно в боевых условиях. Нет зависимости от внешних условий? Они всегда есть, без них никуда. Банально, вставка в начало вектора - O(n), а в начало списка O(1), но по факту, в зависимости от данных и их объема, вставка в вектор может работать быстрее. А потом, вдруг, бац и стали в списке узлы выделять из пула - может отразится на скорости, хотя алгоритм никто не менял. Ну или просто искать мелкий кусок стало проще, чем здоровенный для вектора.
0
|
Undisputed
|
07.07.2020, 22:01
#39
|
Не по теме: DrOffset, Croessmah, я понял что вы хотите мне сказать, спасибо) просто почему то подумал что будет что-то отличное от того что вы сказали мне сейчас... тогда получаются что любой бенчмарк лишён всякого смысла. Нет смысла делать бенчмарк т.к у каждого будет своя правда, но тем не менее, даже взрослые продукты делают эти бенчмарки, так ведь? ну да, они указывают на какой машине тестировали, но ничего не говорят про кеши, каким из веток выполнения компилятор отдал предпочтение (а-ля built in expect) и прочие штуки которые могут влиять на скорость... то есть если так подходить к этому вопросу тогда все бенчмарки пора бросать в корзину :)
0
|
08.07.2020, 12:59 | 40 |
Я почему то считал что - нет, не может.
Единственное исключение скорее всего в дебаг сборке.
0
|
08.07.2020, 12:59 | |
08.07.2020, 12:59 | |
Помогаю со студенческими работами здесь
40
How can I resize all controls or just resize the space between them? Двумерный вектор. Не работает reserve() Реализация функций reserve и clear для вектора Обмен валют Яндекс-деньги и Liberty Reserve Resize Resize Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |