Дефекты эффективности

Дефекты, которые влияют на эффективность кода С++

Эти дефекты обнаруживают проблемы, которые могут привести к узким местам эффективности в коде С++. Обнаруженные проблемы включают:

  • Проблемы, которые непреднамеренно вызывают копию вместо операций перемещения

  • Неэффективное или ненужное создание временных переменных

  • Использование функции, которая имеет, возможно, более эффективную альтернативу

Результаты Polyspace

расширить все

A move operation may throwОперации выдачи перемещения могут привести к тому, что контейнеры STL будут использовать соответствующие операции копирования
Const parameter values may cause unnecessary data copiesЗначения параметров Const могут предотвратить операцию перемещения, приводящую к более интенсивной операции копирования
Const return values may cause unnecessary data copiesЗначения возврата Const могут предотвратить операцию перемещения, приводящую к более интенсивной операции копирования
Const rvalue reference parameter may cause unnecessary data copiesThe const-ness ссылки rvalue препятствует предполагаемой операции перемещения
Const std::move input may cause a more expensive object copyConst- std::move вход не может быть перемещен и приводит к более дорогостоящей операции копирования
Empty destructors may cause unnecessary data copiesОбъявленные пользователем пустые деструкторы препятствуют автогенерации конструкторов перемещения и операторов назначения перемещаются
std::move called on an unmovable typestd::move используется в типе класса без конструктора перемещения или оператора назначения перемещения
Expensive constant std::string constructionОбъект константы строка строка сконструирована из данных константы, что приводит к неэффективному коду
Expensive copy in a range-based for loop iterationПеременная цикла основанной на диапазоне for цикл копируется из элементов области значений вместо ссылки, что приводит к неэффективному коду
Expensive local variable copyЛокальная переменная создается копией из const ссылка и не изменена позже
Expensive pass by valueВозможно, параметр дорого копируется
Expensive return by valueФункции возвращают большой выход по значению вместо по ссылке или указателю
Missing constexpr specifierconstexpr спецификатор может использоваться для выражения для вычисления во время компиляции
Expensive std::string::c_str() use in a std::string operationОперация строки использует выход std::string::c_str метод, приводящий к неэффективному коду
Expensive use of non-member std::string operator+() instead of a simple appendНе являющиеся членами std::string operator+() функция вызывается при добавлении (или +=) метод был бы более эффективным
Expensive use of std::string methods instead of more efficient overloadСистема координат std::string вызывается метод со строковым литералом известной длины вместо одинарного цитируемого символа
Expensive use of std::string with empty string literalИспользование std::string с пустым строковым литералом можно заменить менее дорогими вызовами в std::basic_string Представитель функции
Inefficient string length computationДлина строки, вычисленная с помощью функций длины строки при возврате из std::basic_string::c_str() вместо использования std::basic_string::length()
std::endl may cause an unnecessary flushstd::endl используется вместо более эффективной \n
Use of new or make_unique instead of more efficient make_sharedИспользование new или make_unique для инициализации или сброса shared_ptr приводит к дополнительному выделению памяти
Expensive logical operationЛогическая операция требует оценки обоих операндов из-за их порядка, что приводит к неэффективному коду

Темы

Группы дефектов Bug Finder

Проверки дефектов Bug Finder классифицируются в такие группы, как поток данных, параллелизм, численный и так далее.