Soalan:
Walaupun jangkaan tatasusunan lebih pantas daripada kepingan disebabkan oleh sifat bersebelahan mereka, ujian empirikal mendedahkan bahawa hirisan tempatan adalah jauh lebih cepat daripada tatasusunan tempatan apabila mengakses elemen mereka. Mengapakah ini berlaku?
Latar Belakang:
Ujian penanda aras telah dijalankan untuk membandingkan prestasi mengakses elemen tatasusunan dan kepingan, termasuk varian global dan tempatan. Anehnya, hirisan tempatan muncul sebagai pilihan terpantas.
Jawapan:
Pemeriksaan pemasangan amd64 tatasusunan tempatan dan penanda aras hirisan mendedahkan kemungkinan penyebabnya. Walaupun kedua-dua kaedah menggunakan operasi yang serupa, versi tatasusunan berulang kali memuatkan alamat tatasusunan daripada memori semasa setiap capaian:
LEAQ "".a+1000(SP),BX
Sebaliknya, versi hirisan terutamanya beroperasi pada daftar, melaksanakan hanya satu beban awal daripada memori:
LEAQ (DX)(SI*1),BX
Selain itu, versi tatasusunan menggunakan rutin pemasangan runtime.duffcopy, manakala versi slice tidak. Panggilan masa jalan tambahan ini mungkin menyumbang kepada prestasi versi tatasusunan yang lebih perlahan.
Nota Tambahan:
Percanggahan prestasi yang diperhatikan berterusan tanpa mengira variasi dalam saiz tatasusunan/kepingan, jenis elemen dan susunan pelaksanaan penanda aras.
Atas ialah kandungan terperinci Mengapa Local Go Slices Lebih Pantas Daripada Tatasusunan Tempatan untuk Akses Elemen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!