Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?

Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?

Barbara Streisand
Lepaskan: 2024-12-31 05:00:12
asal
961 orang telah melayarinya

How to Efficiently Initialize Arrays in Go: memset Alternatives?

Analog memset dalam Go

Dalam C , fungsi memset memulakan tatasusunan dengan nilai yang ditentukan dengan cekap. Go, bagaimanapun, tidak mempunyai sokongan memset langsung. Artikel ini meneroka beberapa pendekatan alternatif untuk mencapai kefungsian yang serupa.

Penyelesaian Gelung Berulang

Pelaksanaan mudah menggunakan gelung ialah:

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
Salin selepas log masuk

Penyelesaian Berasaskan Salin

Pendekatan yang dioptimumkan memanfaatkan salinan yang cekap() fungsi:

func memsetRepeat(a []int, v int) {
    if len(a) == 0 {
        return
    }
    a[0] = v
    for bp := 1; bp < len(a); bp *= 2 {
        copy(a[bp:], a[:bp])
    }
}
Salin selepas log masuk

Penyelesaian ini menyerupai pelaksanaan bait.Repeat(). Untuk mencipta []bait baharu yang diisi dengan nilai yang sama, bait.Repeat() disyorkan.

Perbandingan Penanda Aras

Tanda aras prestasi mendedahkan keunggulan memsetRepeat() berbanding memsetLoop() sebagai saiz tatasusunan meningkat:

Array Size memsetLoop memsetRepeat Improvement
100 ~1.15x slower ~1.15x faster
1,000 ~2.5x slower ~2.5x faster
10,000 ~2x slower ~2x faster
100,000 ~1.5x slower ~1.5x faster

Pada sekitar 3800-4000 elemen, memsetRepeat() menawarkan peningkatan prestasi ~3.2x yang ketara.

Kesimpulan

Walaupun memset tidak disokong secara asli dalam Go, memsetLoop() dan memsetRepeat() menyediakan alternatif yang cekap untuk memulakan tatasusunan dengan nilai bukan sifar. memsetRepeat(), menggunakan copy(), muncul sebagai penyelesaian optimum untuk tatasusunan yang lebih besar.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan