Хотите скорости? Передача по значению: соображения производительности
Принцип «Хотите скорости? Передача по значению» предполагает, что передача аргументов по значению иногда может повысить производительность из-за исключения копирования. Для иллюстрации рассмотрим следующий код, использующий классы X и Y:
struct X {
std::string mem_name;
X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
std::string mem_name;
Y(const std::string &name) : mem_name(name) {}
};
int main() {
X(foo());
Y(foo());
}
Здесь foo() возвращает временную строку, которая передается конструкторам X и Y. Когда X инициализирует mem_name, он вызывает конструктор перемещения std::string, который потенциально позволяет избежать копирования строки. Однако, когда Y инициализирует mem_name, он должен скопировать ссылку на строку. и Y выполнит копию. Кроме того, X выполнит ход. Для rvalue (временных) X может выполнять только перемещение, а Y все равно должен выполнять копирование.
Влияние на производительность:
Как правило, перемещение происходит быстрее, чем передача указатель (эквивалент передачи по ссылке). Следовательно, производительность X аналогична производительности Y для lvalue и выше для rvalue.
Внимание:
Хотя идея «Хотите скорости? Передавайте по значению» — это интересная идея, его следует применять разумно. Очень важно учитывать конкретный контекст и потенциальные накладные расходы, связанные с копированием больших структур данных. Рекомендуется использовать профилирование, чтобы определить фактическое влияние на производительность.
Дополнительные ресурсы:
[Выступление Скотта Мейера по GN13](https://www.youtube.com /watch?v=uk3-zmJWt-E) (таймфреймы 8:10 и 8:56)[Блог juanchopanza: «Хотите скорости? Не (всегда) переходите по значению»]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3