Меня зовут Давиде Факонти, и моя работа - одна из лучших в мире: я работаю в робототехнике .
Этот блог/репозиторий поддерживается в свободное время , и это не связано с моей работой там. Поэтому мнения (и мемы) - все мои и никоим образом не представляют моего работодателя .
Я люблю программирование C ++ и открытый исходный код, и этот «дневник» - мой небольшой вклад в сообщество OSS.
Оптимизация кода в C ++ - это то, с чем никто не может сопротивляться. Вы можете повеселиться и притворяться, что делаете что -то полезное для вашей организации одновременно!
В этом репозитории я запишу несколько простых шаблонов проектирования, чтобы улучшить ваш код и удалить ненужные накладные расходы в C ++ .
Если вы опытный эксперт C ++, у вас, вероятно, уже есть собственный набор правил.
Эти правила помогут вам выглядеть как инженер Bad-Ass/Rockstar/10x для ваших коллег.
Вы тот человек, который случайно бросает STD :: Vector <> :: Reserve перед петлей и кивками, улыбаясь, глядя на улучшение производительности и удивление члена вашей команды.

Надеемся, что примеры в этом репозитории помогут вам достичь этого статуса Гуру и, как побочный эффект, сохранить планету от глобального потепления, избавляя бесполезные циклы процессора от потраченной впустую.
Затем, к сожалению, кто -то на другой стороне планеты начнет добывать биткойны или написать ее/его применение в Python , и все ваши усилия по сэкономинию электроэнергии были ни за что.
Я шучу, разработчики Python, мы любим вас!
Рассказчик: «Он не шутил ...»
Самое первое, что должен делать любой человек, заинтересованный в производительности, это:
Я и мои коллеги почти всегда ошибаемся в отношении причин, по которым кусок кода находится медленным.
Иногда мы правы, но действительно трудно понять, как рефакторинг улучшит производительность. Хорошие инструменты профилирования показывают за считанные минуты «низкие висящие фрукты»: минимальная работа, максимальная выгода!
Суммирование: 10 минут профилирование может сэкономить время угадания и рефакторинга.
Мои инструменты "Goto" в Linux - горячая точка и Heaptrack. Я понимаю, что у Windows тоже есть похожие инструменты.

В эталонной войне, если вы солдат, это ваша винтовка и ручные гранаты.
Как только вы узнаете, какая часть кода заслуживает оптимизации, вы можете использовать Benchmark Google, чтобы измерить время, проведенное в очень конкретном классе или функции.
Вы даже можете запустить его в Google Bendal Online здесь: Quick-bench.com.

Написание хорошего кода - это все равно что чистить зубы: вы должны сделать это, не слишком много думая об этом.
Это мышца, которую вам нужно тренировать, которые со временем станут сильнее. Но не волнуйтесь: как только вы начнете, вы начнете видеть повторяющиеся узоры, которые удивительно просты и работают во многих различных случаях использования.
Оповещение о спойлере : один из моих самых любимых трюков - минимизировать количество распределений кучи . Вы не представляете, сколько это помогает.
Но давайте сделаем что -то абсолютно ясно:
Другими словами, подумайте дважды, прежде чем внести какие -либо изменения в вашем коде, что делает его менее читабельным или труднее отладки, просто потому, что вы считаете, что он может работать на 2,5% быстрее.
Для более комфортного опыта чтения, посетите: https://cpp-optimizations.netlify.app
Используйте константу по умолчанию.
Двигать семантику (Тодо).
Оптимизация возврата значения (TODO).
Используйте std :: ecector <> :: резервировать по умолчанию
«Я выучил связанные списки в университете, должен ли я их использовать?» Noooope.
Вам не нужен std::map<> для этого.
Маленькая векторная оптимизация
Струны (почти) векторы
Когда не волнуйтесь: оптимизация маленькой струны.
Строковая конкатенация: ложное чувство безопасности operator+ .
std::string_view : любовь с первого взгляда (Todo).
Пример: 2D/3D преобразует правильный путь.
Итерация над 2D -матрицей: менее элегантный, более исполнительный.
boost::container::flat_map . Вы не представляете, что произошло дальше.Более простой и более быстрый способ отфильтровать облака точек в PCL.
Быстрый палиндром: стоимость условных ветвей
Эта работа лицензирована в соответствии с CC By-Sa 4.0