Yang manakah lebih cepat dalam Go: `append()` atau tugasan slice?

DDD
Lepaskan: 2024-11-11 01:49:02
asal
758 orang telah melayarinya

Which is faster in Go: `append()` or slice assignment?

Perbandingan Prestasi Slice Append dan Assignment dalam Go

In Go, penghirisan memainkan peranan penting dalam mengurus data dengan cekap. Walau bagaimanapun, persoalan timbul mengenai perbezaan prestasi antara dua operasi hirisan yang biasa digunakan: tambah dan tugasan.

Lampirkan lwn. Tugaskan

Operasi append() memanjangkan kepingan sedia ada dengan elemen tambahan, manakala pengendali tugasan (=), apabila digunakan pada kepingan, hanya menulis ganti elemen sedia ada dengan nilai baharu.

Analisis Prestasi

Menanda aras kod berikut menunjukkan jurang prestasi:

Hasil penanda aras menunjukkan bahawa "a[i] = i" (tugasan) secara konsisten mengatasi prestasi "a = append(a, i)" (tambah):

Penjelasan

Prestasi "a[i] = i" yang lebih pantas boleh dikaitkan dengan sifat penugasan langsungnya. Ia hanya memberikan nilai i kepada elemen yang sepadan dalam kepingan.

Sebaliknya, "a = append(a, i)" melibatkan satu siri operasi:

  1. Salin pengepala kepingan sedia ada.
  2. Buat kepingan sementara untuk parameter variadik (i).
  3. Reslice a jika terdapat kapasiti yang mencukupi (disediakan dalam penanda aras).
  4. Tetapkan i kepada elemen terakhir a.
  5. Kemas kini pengepala kepingan dalam pembolehubah setempat (a).

Langkah tambahan ini memperkenalkan overhed berbanding dengan tugasan langsung dalam "a[i] = i ".

Kesimpulan

Memahami perbezaan prestasi antara operasi hirisan adalah penting untuk mengoptimumkan kecekapan kod. Untuk penetapan nilai mudah, "a[i] = i" terbukti sebagai pilihan yang lebih cekap. Walau bagaimanapun, apabila mengembangkan kepingan adalah perlu, "a = append(a, i)" kekal sebagai pendekatan yang sesuai.

Atas ialah kandungan terperinci Yang manakah lebih cepat dalam Go: `append()` atau tugasan slice?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan