Mahukan Kelajuan? Nilai Lulus: Adakah Copy Elision Sentiasa Pemenang Prestasi?

Linda Hamilton
Lepaskan: 2024-10-26 11:59:03
asal
948 orang telah melayarinya

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

Mahukan Kelajuan? Nilai Lulus: Pertimbangan Prestasi

Prinsip "Mahukan kelajuan? Lulus nilai" mencadangkan bahawa menghantar hujah mengikut nilai kadangkala boleh meningkatkan prestasi disebabkan penyingkiran salinan. Untuk menggambarkan, pertimbangkan kod berikut menggunakan kelas X dan Y:

<code class="cpp">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());
}</code>
Salin selepas log masuk

Di sini, foo() mengembalikan rentetan sementara yang dihantar kepada kedua-dua pembina X dan Y. Apabila X memulakan mem_name, ia memanggil pembangun bergerak std::string, yang berpotensi mengelakkan penyalinan rentetan. Walau bagaimanapun, apabila Y memulakan nama_mem, ia mesti menyalin rujukan rentetan.

Argumen Lvalue vs Rvalue:

Jika nilai l (bukan sementara) diluluskan, kedua-dua X dan Y akan melakukan salinan. Selain itu, X akan melakukan gerakan. Untuk nilai r (sementara), X hanya boleh melakukan satu pergerakan, manakala Y masih mesti melakukan salinan.

Implikasi Prestasi:

Secara amnya, pergerakan lebih cepat daripada berlalu penunjuk (bersamaan dengan lulus dengan rujukan). Oleh itu, X mempunyai prestasi yang serupa dengan Y untuk nilai dan prestasi yang lebih baik untuk nilai.

Awas:

Walaupun "Mahukan kelajuan? Lulus nilai" ialah idea yang menarik, ia harus diaplikasikan secara bijaksana. Adalah penting untuk mempertimbangkan konteks khusus dan potensi overhed yang berkaitan dengan penyalinan struktur data yang besar. Pemprofilan disyorkan untuk menentukan kesan prestasi sebenar.

Sumber Tambahan:

  • [Scott Meyer's GN13 Talk](https://www.youtube.com /watch?v=uk3-zmJWt-E) (jangka masa 8:10 dan 8:56)
  • [Juanchopanza's Blog: "Ingin Kelajuan? Jangan (Sentiasa) Melewati Nilai"]

Atas ialah kandungan terperinci Mahukan Kelajuan? Nilai Lulus: Adakah Copy Elision Sentiasa Pemenang Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!