|
Мой лучший друг-отладчик!
|
||||||||||||||||
Довольно большое время работы с std::min()05.12.2014, 08:55. Показов 1540. Ответов 14
Метки нет (Все метки)
Здравствуйте! Имеется 2 исходника.
1:
Самое интересное : при сдаче задачи в тестирующую систему программа с этим if'ом заходит с довольно большим запасом по времени, тогда как версия с std::min ловит Time Limit и по моим замерам работает в 4-5 раз дольше. Кто может обьяснить, почему так происходит? Неужели вызов функции настолько замедляет программу каждый раз? Функция std::min элементарна же.(вариант со своим, самописным min с inline и без шаблонов я не тестил).
0
|
||||||||||||||||
| 05.12.2014, 08:55 | |
|
Ответы с готовыми решениями:
14
Большое время работы Std::min Из переменной типа std::string записать в файл большое количество данных (2 Mb) |
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 05.12.2014, 09:31 | |
|
ZaMaZaN4iK, как минимум, у Вас во втором случае присваивание происходит чаще.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||
| 05.12.2014, 09:39 | ||||||
|
ZaMaZaN4iK, не по теме, но с вектором у тебя беда. Сделай p.reserve(100) перед циклом:
0
|
||||||
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,227
|
||||||||||||
| 05.12.2014, 09:59 | ||||||||||||
|
Смотрим в первый
0
|
||||||||||||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 11:33 [ТС] | |
|
TheCalligrapher, прошу прощения. Не тот исходник добавил. В том, про который я веду речь, этот самый break стоит.Так что тут с меня взятки гладки
![]() DrOffset, Да, я знаю. Можно и reserve(), можно и сразу размер указать. Не суть важно. На таком размере массива(а размер всего лишь сто) произойдет всего лишь 8 перевыделений памяти. Хоть это и медленная операция, но здесь она не играет ключевую роль. А так да,конечно, Вы правы. Просто лень писать было(хоть это и глупо звучит )Toshkarik, ну я понимаю это. Но что, операция присваивания такая долгая что ли? Добавлено через 4 минуты TheCalligrapher, не туда я посмотрел. На самом деле тот код даже без break работает быстрее. И если я там этот break поставлю, то это наоборот будет только оптимизация, а не замедление кода. Добавлено через 1 минуту И там кстати нужно писать break с условием, иначе будет неправильный ответ
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 05.12.2014, 12:05 | ||
|
0
|
||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:04 [ТС] | |
|
DrOffset, да, я обычно память резервирую,но хочу Ваше внимание, что не это место узкое в моей программе, этот оптимайз на максимальных данных(а это повторюсь всего лишь 100), даёт выигрыш на самом большом тесте всего лишь 4 сотых секунды.Вы мне лучше помогите с тем местом, на которое я обратил Ваше внимание.
Я не просто знаю, я уверен, что там будет не более 8 первыделений памяти. Так как по стандарту вектор увеличивает свой размер в 2 раза по сравнению с предыдущим. Ну и тут просто логарифм возьмем и получим, что 8-9 перевыделений. И хоть это операция долгая, я не спорю, она так мало раз выполняется, что не это ключевое место в моем коде. Версия компилятора на сайте была также указана и она совпадает с моим(также, как и флаги компиляции). А STL'овский вектор только таким способ память перевыделяет.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 05.12.2014, 13:08 | ||
|
По теме: попробуйте использовать профилировщик.
0
|
||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:12 [ТС] | |
|
Toshkarik, прошу прощения за может быть неправильно понятое выражение. Стандартом я имел в виду стандартную реализацию vector в STL. Вот ссылка на Хабр : тыц
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 05.12.2014, 13:16 | |
|
ZaMaZaN4iK, это зависит от компилятора, от конкретной реализации STL. Были компиляторы и с 1.5 и c 1.7 и с 2.5 множителями. Правда, версии сейчас не вспомню.
Добавлено через 1 минуту Вот, что то нашел: http://alenacpp.blogspot.ru/2005/06/vector_30.html
1
|
|
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:23 [ТС] | |
|
Toshkarik, да, спасибо за ссылку. Тоже читал. Только что замерил свой коэффициент - 2. К сожалению, у меня используется наихудший. Из этого следует, что хуже моего варианта не будет точно
![]() Добавлено через 1 минуту Toshkarik, Вы не подскажете, так в чём может быть проблема всё таки ? тут явно дело не в перераспрделении памяти. Так как во первых, в двух исходниках используется один и тот же вариант, а во вторых, я уже протестил уже и с reserve(). Неужели операция присваивания так много занимает времени? Или вызов функции std::min() такой долгий?
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||||||||
| 05.12.2014, 13:30 | ||||||||||||
0
|
||||||||||||
|
Мой лучший друг-отладчик!
|
||||||
| 05.12.2014, 13:34 [ТС] | ||||||
|
Только что написал свою функцию min:
Добавлено через 3 минуты Toshkarik, да,я делал это. В случае с min оно, понятное дело, больше. Это сразу понятно. Получается, что программа тормозит из-за того, что очень много раз выполняется операция присваивания... Но я никак не мог предположить, что эта операция может долго выполняться.
0
|
||||||
|
Диванный эксперт
|
|
| 05.12.2014, 14:01 | |
|
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||||
| 05.12.2014, 14:25 | ||||||||||
Добавлено через 4 минуты ![]() Добавлено через 11 минут
1
|
||||||||||
| 05.12.2014, 14:25 | |
|
Помогаю со студенческими работами здесь
15
Большое время перерисовки OpenGL
Большое расхождение в результатах работы программы Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream Отсортировать большое число элементов за минимальное время, используя битовый массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|