Rumah > pembangunan bahagian belakang > Golang > Adakah terdapat Go yang pantas dan cekap setara dengan memset C?

Adakah terdapat Go yang pantas dan cekap setara dengan memset C?

DDD
Lepaskan: 2024-12-22 04:22:10
asal
167 orang telah melayarinya

Is there a fast and efficient Go equivalent to C  's memset?

Adakah terdapat Go yang setara untuk fungsi memset C?

Dalam C , memset membenarkan permulaan tatasusunan dengan nilai tertentu . Fungsi ini amat cekap. Dalam Go, memulakan tatasusunan atau kepingan dengan semua sifar adalah mudah menggunakan make([]int, 1000000); walau bagaimanapun, ini tidak menyediakan pilihan untuk memulakan dengan nilai bukan sifar.

Walaupun gelung boleh digunakan untuk pemulaan manual, ia tidak mempunyai kecekapan memset.

Memset Analogs dalam Pergi:

1. Pendekatan Berasaskan Gelung:

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

2. Pendekatan Berasaskan copy() (Disyorkan):

Fungsi copy() sangat dioptimumkan dan boleh digunakan untuk operasi seperti memset.

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 menetapkan elemen pertama secara manual dan menyalin bahagian yang telah ditetapkan ke bahagian yang tidak ditetapkan menggunakan copy(). Algoritma menggunakan pendekatan penggandaan untuk mengurangkan bilangan lelaran untuk log(n).

Penandaarasan:

Penandaarasan memsetRepeat() terhadap memsetLoop() menunjukkan prestasi yang ketara kelebihan untuk memsetRepeat() apabila bilangan elemen meningkat, terutamanya sekitar 3800-4000 elemen.

Nota Tambahan:

Untuk kepingan kecil, memsetLoop() mungkin berprestasi lebih baik sedikit. Walau bagaimanapun, memsetRepeat() menawarkan prestasi yang jauh lebih baik untuk kepingan yang lebih besar.

Atas ialah kandungan terperinci Adakah terdapat Go yang pantas dan cekap setara dengan memset C?. 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