Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mahukan Kelajuan? Nilai Lulus: Adakah Copy Elision Sentiasa Pemenang Prestasi?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-26 11:59:03949semak imbas

 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>

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!

Kenyataan:
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