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