Defectos de rendimiento
Estos defectos detectan problemas que pueden provocar cuellos de botella en el rendimiento del código C/C++. Los problemas detectados incluyen:
Problemas que provocan inadvertidamente operaciones de copia en lugar de operaciones de movimiento
Creación ineficiente o innecesaria de variables temporales
Uso de funciones que podrían tener una alternativa posiblemente más eficiente
Resultados de Polyspace
A move operation
may throw | Throwing move operations might result in STL containers using the corresponding copy operations |
Const parameter
values may cause unnecessary data copies | Const parameter values may prevent a move operation resulting in a more performance-intensive copy operation |
Const return
values may cause unnecessary data copies | Const return values may prevent a move operation resulting in a more performance-intensive copy operation |
Const rvalue
reference parameter may cause unnecessary data copies | The const -ness of an rvalue reference prevents intended move
operation (Desde R2021a) |
Const std::move
input may cause a more expensive object copy | Const std::move input cannot be moved and results in more
expensive copy operation |
Empty destructors
may cause unnecessary data copies | User-declared empty destructors prevent autogeneration of move constructors and move assignment operators |
Expensive return
of a const object | The return statement of a function copies an objects instead of moving it because
the returned object is declared as a const (Desde R2022a) |
Move operation
uses copy | Non-const rvalue reference parameter of a function or operator is
copied instead of moved (Desde R2021b) |
std::move called
on an unmovable type | std::move used on a class type with no move constructor or move
assignment operator |
Expensive last
use of variable | An expensive-to-copy local variable is copied in its final use instead of being moved (Desde R2025a) |
Expensive copy in
a range-based for loop iteration | The loop variable of a range-based for loop is copied from the
range elements instead of being referenced resulting in inefficient code |
Expensive local
variable copy | Local variable is created by copy from a const reference and not
modified later (Desde R2021a) |
Expensive member
initialization | You assign values to class members in the constructor body instead of constructing members using a member initializer list (Desde R2023b) |
Expensive pass by
value | Parameter might be expensive to copy |
Expensive return
by value | Functions return large output by value instead of by reference or pointer |
Expensive use of
std::any_cast | An object is cast by-value using std::any_cast when casting
by-reference is more efficient (Desde R2023b) |
Expensive
construction of std::string or std::regex from constant string | A constant std::string or std::regex object is
constructed from constant data, resulting in inefficient code |
Missing constexpr
specifier | constexpr specifier can be used on variable or function for
compile-time evaluation |
Unnecessary
construction before reassignment | Instead of directly constructing objects with value, you construct objects and then immediately assign values to objects (Desde R2023a) |
Expensive unused
object | Expensive local object is constructed but not used (Desde R2024a) |
Expensive
std::function type definition | Definition of std::function type uses pass-by-value semantics
for arguments that are expensive to copy (Desde R2024a) |
Expensive dynamic
cast | Expensive dynamic_cast is used instead of more efficient
static_cast or const_cast (Desde R2021b) |
Expensive use of
a standard algorithm when a more efficient method exists | Functions from the algorithm library are misused with
inappropriate inputs, resulting in inefficient code (Desde R2021b) |
Expensive use of
non-member std::string operator+() instead of a simple append | The non-member std::string operator+() function is called when
the append (or += ) method would have been more efficient |
Expensive use of
std::string methods instead of more efficient overload | An std::string method is called with a string literal of known
length, instead of a single quoted character (Desde R2021a) |
Expensive use of
std::string with empty string literal | Use of std::string with empty string literal can be replaced by
less expensive calls to std::basic_string member functions (Desde R2021a) |
Expensive use of
string functions from the C standard library | String functions from the C standard library are used inefficiently (Desde R2022a) |
Expensive use of
substr() to shorten a std::string | The method std::string::substr() is called to shorten an
std::string object (Desde R2022a) |
Inefficient use
of sprintf | The function sprintf , snprintf , or
swprintf copies strings instead of the more efficient
strcpy , strncopy , or
wcsncpy (Desde R2021b) |
Inefficient
string length computation | String length calculated by using string length functions on return from
std::basic_string::c_str() instead of using
std::basic_string::length() |
std::endl may
cause an unnecessary flush | std::endl is used instead of the more efficient
\n |
Use of new or
make_unique instead of more efficient make_shared | Using new or make_unique to initialize or
reset shared_ptr results in additional memory allocation (Desde R2021a) |
Unnecessary use
of std::string::c_str() or equivalent string methods | Instead of a std::string object, a string operation uses the
C-string obtained from std::string functions including
std::string::c_str , std::string::data() ,
std::string::at() , or std::string::operator[] ,
resulting in inefficient code |
Expensive use of
container's count method | The function member count() of a container is used for checking
if a key is present, leading to inefficient code (Desde R2021b) |
Expensive use of
container's insertion methods | One of the insertion methods of a container is used to insert a temporary object (Desde R2022a) |
Expensive use of
container's size method | A container's size() method is used for checking emptiness
instead of its empty() method, which is more efficient (Desde R2022b) |
Expensive use of
map's bracket operator to insert or assign a value | The bracket operator of std::map or
std::unordered_map is used for inserting or assigning a value in the
container instead of the insert_or_assign() method, which is more
efficient (Desde R2022b) |
Missing call to
container's reserve method | A fixed number of items are added to a container without calling the reserve() method of the container beforehand, resulting in inefficient code (Desde R2022b) |
Expensive use of
map instead of set | The key for a map is member of the object being inserted, resulting in redundant map key (Desde R2024b) |
Expensive logical
operation | A logical operation requires the evaluation of both operands because of their order, resulting in inefficient code (Desde R2021a) |
Expensive return
caused by unnecessary std::move | An unnecessary call to std::move in the return statement hinders
return value optimization, resulting in inefficient code (Desde R2022b) |
Expensive
allocation in loop | Fixed sized memory is allocated or deallocated in a loop (Desde R2022a) |
Expensive
post-increment operation | Object is post-incremented when pre-incrementing is faster (Desde R2021b) |
Inefficient use
of for loop | Range-based for loop can perform equivalent iteration more efficiently (Desde R2022a) |
Unnecessary
Padding | Members of a struct are padded to fulfill alignment requirement
when rearranging the members to fulfill this requirement saves memory (Desde R2021b) |
Unnecessary
implementation of a special member function | Implementing special member functions hinders code optimization when implicit versions are equivalent (Desde R2023a) |
Unnecessary
reference to parameter | Parameter is passed to function as const reference when passing
by value is more efficient (Desde R2024a) |
Temas
- Bug Finder Defect Groups
The Bug Finder defect checkers are classified into groups such as data flow, concurrency, numerical, and so on.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)