Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Susan Sarandonasal
2024-11-01 15:35:02257semak imbas

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