Rumah >pembangunan bahagian belakang >Golang >Go Slices: Tambah lwn. Salin untuk Penyalinan Dalam – Manakah Lebih Cekap?

Go Slices: Tambah lwn. Salin untuk Penyalinan Dalam – Manakah Lebih Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 21:00:15596semak imbas

Go Slices:  Append vs. Copy for Deep Copying – Which is More Efficient?

Penyalinan Dalam Yang Cekap bagi Kepingan

Dalam Go, mencipta salinan dalam hirisan melibatkan replikasi kandungannya ke lokasi memori yang berasingan. Ini memastikan bahawa sebarang pengubahsuaian yang dibuat pada satu keping tidak menjejaskan yang lain.

Satu pendekatan kepada penyalinan dalam adalah melalui fungsi tambahan:

copy := append([]T{}, orig...)

Di sini, orig kepingan asal dilampirkan pada kepingan kosong, mencipta salinan kepingan baharu dengan tatasusunan sandarannya sendiri.

Kaedah alternatif menggunakan salinan terbina dalam fungsi:

cpy := make([]T, len(orig))
copy(cpy, orig)

Pendekatan ini menyalin terus elemen dari orig ke cpy hirisan yang baru dibuat.

Kedua-dua penyelesaian menyalin nilai dalam kepingan dengan berkesan. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa jika kepingan mengandungi penunjuk atau struct dengan medan penuding, nilai penuding ini masih akan merujuk kepada lokasi yang sama seperti dalam kepingan asal.

Menanda aras kedua-dua kaedah menghasilkan prestasi yang setanding:

BenchmarkCopy     100000         24724 ns/op
BenchmarkAppend   100000         24967 ns/op

Kod pemasangan mendedahkan bahawa kedua-dua tambahan dan salinan mungkin melakukan pengisian sifar memori sebagai sebahagian daripada mereka operasi.

Akhirnya, pilihan antara kaedah tambah dan salin bergantung pada keutamaan individu dan pertimbangan prestasi. Walau bagaimanapun, kedua-dua pendekatan secara berkesan hirisan salinan mendalam, memastikan integriti data apabila bekerja dengan contoh data hirisan yang berasingan.

Atas ialah kandungan terperinci Go Slices: Tambah lwn. Salin untuk Penyalinan Dalam – Manakah Lebih Cekap?. 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