С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
1

std::move тормозит процесс

25.12.2019, 23:11. Показов 1579. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, слушал конференцию Антона Полухина, в один момент он сказал что std::move при извлечении последнего элемента из вектора будет ускорять, я не поверил, и решил затестить, на тестах в средем на 6-8% код выполняеться дольше, т.е. его слова не верны, или я что-то не так делаю?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    const int N = 1000000;
    std::vector<std::string> v(N, "S");
 
    int start = clock();
 
    for (int i = 0; i < N; i++)
    {
        std::string a = v.back(); // на деле быстрее хотя он говорил наоборот
        std::string a = std::move(v.back()); // медленее - должно быть быстрее
        v.pop_back();
    }
 
    int end = clock();
 
    std::cout << (end - start);
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2019, 23:11
Ответы с готовыми решениями:

std::move()
Есть ли разница между следующими вещами: A = std::move(B); // and std::copy(B.begin(),...

Std::move
Добрый вечер, #include &lt;iostream&gt; using namespace std; class A { private: int x = 10; ...

Optional и std::move
добрый день. разбираясь в исходниках optional'а из gcc, я понял, что там нигде не делается...

Функция std::move()
struct DotPosition { long x; long y; }; std::vector&lt;DotPosition&gt; dots; DotPosition dot;...

5
Вездепух
Эксперт CЭксперт С++
12804 / 6679 / 1797
Регистрация: 18.10.2014
Сообщений: 16,903
25.12.2019, 23:14 2
Цитата Сообщение от kitsoRik Посмотреть сообщение
на тестах в средем на 6-8% код выполняеться дольше
Вы, может, отладочную версию тестировали?
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
25.12.2019, 23:22  [ТС] 3
TheCalligrapher, даже протестировав в релизе, разница уменшилась до 3-4%, но все равно не в ту сторону.
0
Неэпический
18113 / 10700 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
25.12.2019, 23:34 4
Лучший ответ Сообщение было отмечено kitsoRik как решение

Решение

Цитата Сообщение от kitsoRik Посмотреть сообщение
std::vector<std::string> v(N, "S");
а так?
std::vector<std::string> v(N, "disable small string optimization");
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
25.12.2019, 23:39 5
1. Сделай строку больше (например, "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"), а то короткие строки могут храниться прямо внутри тела std::string, без использования динамической памяти.
2. Передай a в функцию, которую не видно, а то оптимизатор в первом случае мог выкинуть код создания a (маловероятно)
3. Проверь как отличается ассемблерный выхлоп.
1
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
25.12.2019, 23:45  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
а так?
да, точно, он говорил об выиграше на new и delete, я как-то пропустил это, конечно теперь я полностью осознал это.

Цитата Сообщение от AlexVRud Посмотреть сообщение
2. Передай a в функцию, которую не видно, а то оптимизатор в первом случае мог выкинуть код создания a (маловероятно)
3. Проверь как отличается ассемблерный выхлоп.
Конечно, первый пример все подводит к тому чему нужно. Спасибо.
0
25.12.2019, 23:45
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2019, 23:45
Помогаю со студенческими работами здесь

Отличие std::move от & ?
Здравствуйте, Подскажите пожалуйста, никак не могу понять, чем принципиально отличается...

Немного не понимаю std::move
Здравствуйте, я немного не понимаю работу кода на 150-155 строках здесь: #include &lt;iostream&gt;...

Func(std::move(.) копирует ?
Здравствуйте, имеется следующий код: void foo(std::vector&lt;int&gt;&amp;&amp; v) { std::cout &lt;&lt; &quot;vector...

Error: 'move' is not a member of 'std'
Как бороться с этой гогой?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru