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

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

Linda Hamilton
Lepaskan: 2024-11-02 02:51:30
asal
319 orang telah melayarinya

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
Salin selepas log masuk

std::vector:

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

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>
Salin selepas log masuk

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