Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa std::vector Lebih Cepat daripada std::array dalam Lelaran?

Mengapa std::vector Lebih Cepat daripada std::array dalam Lelaran?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 02:51:30144semak imbas

Why is std::vector Faster than std::array in Iteration?

Perbezaan Prestasi antara Lelaran melalui std::array dan std::vector

Tanda aras saya sebelum ini, yang cuba menilai prestasi lelaran bagi std::array dan std::vector, mengandungi beberapa ketidaksempurnaan. Walau bagaimanapun, apabila menyemak semula isu itu, saya mendapati bahawa std::vector sebenarnya, lebih pantas daripada std::array.

Untuk mengurangkan sebarang potensi pengoptimuman, saya menggunakan beberapa langkah, termasuk:

  • Menggunakan hasil gelung untuk menghalang pengoptimuman pengkompil
  • Menyusun dengan bendera -O3 untuk kelajuan dipertingkatkan
  • Mengukur secara eksklusif gelung yang disasarkan menggunakan std::chrono

Masa pelaksanaan yang terhasil untuk kedua-dua struktur data adalah seperti berikut:

std::array:

$ g++ arrVsVec.cpp -O3
$ ./a.out
result: 0
time: 99.554109

std::vector:

$ g++ arrVsVec.cpp -O3
$ ./a.out
result: 0
time: 30.734491

Sebab Percanggahan:

Percanggahan prestasi berpunca daripada halaman memori std::array tidak bermastautin dalam alamat proses angkasa lepas. Khususnya, skop global std::array berada dalam bahagian .bss boleh laku, yang belum dihalakan dan dimulakan kepada sifar. Sebaliknya, std::vector telah diperuntukkan dan dimulakan kepada sifar, menyebabkan halaman memorinya sudah ada dalam ruang alamat.

Menyelesaikan Isu:

Untuk menghapuskan isu ini dan menunjukkan pariti antara dua struktur data, seseorang boleh menambah kod berikut sebagai baris pertama utama untuk membawa halaman masuk:

<code class="cpp">std::fill_n(v.data(), n, 1); // included in <algorithm></code>

Sebagai alternatif, pada sistem Linux, satu boleh menggunakan mlock(v.data(), v.size() * sizeof(v[0])); untuk memaksa halaman masuk ke dalam ruang alamat. Rujuk halaman manual man mlock untuk butiran lanjut.

Atas ialah kandungan terperinci Mengapa std::vector Lebih Cepat daripada std::array dalam Lelaran?. 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