Rumah > pembangunan bahagian belakang > C++ > Mengapa lelaran std::vector lebih pantas daripada lelaran std::array walaupun penanda aras awal mencadangkan sebaliknya?

Mengapa lelaran std::vector lebih pantas daripada lelaran std::array walaupun penanda aras awal mencadangkan sebaliknya?

Susan Sarandon
Lepaskan: 2024-11-01 15:35:02
asal
388 orang telah melayarinya

Why is std::vector iteration faster than std::array iteration despite initial benchmarks suggesting otherwise?

Mengapa std::vector Iteration Melebihi std::array Iteration

Kesimpulan Asal Salah Tanggapan

Pada mulanya, penanda aras yang cacat mencadangkan bahawa lelaran std::array adalah lebih pantas daripada lelaran std::vector. Walau bagaimanapun, setelah membetulkan penanda aras, didapati bahawa std::vector adalah lebih pantas dengan ketara.

Pelaksanaan Penanda Aras

Untuk memastikan ketepatan, penanda aras menggunakan beberapa penambahbaikan:

  • Penggunaan hasil untuk mengelakkan pengoptimuman gelung
  • -Bendera pengoptimuman O3 untuk kelajuan dipertingkatkan
  • std::chrono untuk pengukuran gelung terpencil tanpa gangguan pembolehubah statik

Keputusan dan Penjelasan

Hasil penanda aras mendedahkan bahawa lelaran std::vektor selesai dalam kira-kira 30 milisaat, manakala lelaran std::array mengambil masa kira-kira 99 milisaat.

Perbezaan berpunca daripada tingkah laku halaman memori. Dalam penanda aras, std::array berada dalam bahagian .bss boleh laku (dengan permulaan sifar), jadi halaman memorinya tidak dimuatkan ke dalam ruang alamat proses. Sebaliknya, std::vector telah diperuntukkan dan diisi sifar, mengakibatkan kehadiran halaman.

Penyelesaian

Pra-fault halaman std::array sebanyak sifar -mengisi atau menggunakan mlock() pada Linux membawa halamannya ke dalam ruang alamat, menyamakan kelajuan lelarannya dengan std::vector.

Atas ialah kandungan terperinci Mengapa lelaran std::vector lebih pantas daripada lelaran std::array walaupun penanda aras awal mencadangkan sebaliknya?. 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