Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengelakkan Pengagihan Semula Memori dalam Fungsi Pembungkus Variadic?

Bagaimana untuk Mengelakkan Pengagihan Semula Memori dalam Fungsi Pembungkus Variadic?

Mary-Kate Olsen
Lepaskan: 2024-11-02 18:19:02
asal
606 orang telah melayarinya

How to Avoid Memory Reallocation in Variadic Wrapper Functions?

Pembungkus Variadik tanpa Alokasi Semula Memori

Fungsi variadik memberikan fleksibiliti dalam pengendalian parameter, tetapi menambahkan item pada fungsi pembungkus boleh mencetuskan pengagihan semula memori. Artikel ini meneroka penyelesaian untuk mengelakkan isu ini sambil mengekalkan kemudahan penyahpepijatan.

Satu pendekatan biasa untuk mencipta pembalut variadik ialah dengan terus menghantar hujah kepada fungsi dalaman:

<code class="go">func Debug(a ...interface{}) {
    if debug {
        fmt.Fprintln(out, prefix, sep, a...)
    }
}</code>
Salin selepas log masuk

Walau bagaimanapun, ini boleh membawa kepada ralat "terlalu banyak hujah". Pendekatan lain ialah menggunakan vararg untuk membungkus argumen, tetapi ini menghasilkan ralat "senarai nama tidak dibenarkan dalam jenis antara muka."

Penyelesaian yang nampaknya sah adalah dengan mencipta kepingan sementara dan memasukkan awalan, pemisah, dan hujah ke dalamnya:

<code class="go">func Debug(a ...interface{}) {
    if debug {
        sl := make([]interface{}, len(a)+2)
        sl[0] = prefix
        sl[1] = sep
        for i, v := range a {
            sl[2+i] = v
        }

        fmt.Fprintln(out, sl...)
    }
}</code>
Salin selepas log masuk

Walaupun ini berfungsi, ia melibatkan peruntukan memori yang tidak perlu.

Tambah sebagai Penyelesaian Slick

Lebih cekap pendekatan adalah untuk menggunakan fungsi append. Dengan menambahkan awalan dan pemisah pada argumen asal, kita boleh mengelakkan pengagihan semula memori:

<code class="go">func Debug(a ...interface{}) {
    if debug {
        fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...)...)
    }
}</code>
Salin selepas log masuk

Pelapik satu ini dengan berkesan menambahkan awalan dan pemisah kepada argumen variadic tanpa membuat kepingan baharu. Ia ringkas, cekap dan menyelesaikan isu peruntukan memori tanpa menjejaskan kefungsian pembalut variadic.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Pengagihan Semula Memori dalam Fungsi Pembungkus Variadic?. 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