«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Хотите скорости? Передача по значению: всегда ли Copy Elision выигрывает в производительности?

Хотите скорости? Передача по значению: всегда ли Copy Elision выигрывает в производительности?

Опубликовано 18 ноября 2024 г.
Просматривать:703

 Want Speed? Pass By Value: Is Copy Elision Always the Performance Winner?

Хотите скорости? Передача по значению: соображения производительности

Принцип «Хотите скорости? Передача по значению» предполагает, что передача аргументов по значению иногда может повысить производительность из-за исключения копирования. Для иллюстрации рассмотрим следующий код, использующий классы 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