Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mendapatkan Sepotong Bait daripada Rentetan dalam Go Tanpa Menyalin Memori?

Bagaimanakah Saya Boleh Mendapatkan Sepotong Bait daripada Rentetan dalam Go Tanpa Menyalin Memori?

Patricia Arquette
Lepaskan: 2024-11-02 10:59:02
asal
851 orang telah melayarinya

How Can I Retrieve a Byte Slice from a String in Go Without Memory Copying?

Mengambil Sekeping Bait daripada Rentetan tanpa Salinan Memori menggunakan Tidak Selamat

Masalah:

Anda perlu menukar rentetan kepada kepingan bait tanpa menanggung penalti prestasi salinan memori, terutamanya untuk mengendalikan set data yang besar.

Jawapan:

Langkah 1: Fahami Salinan Memori Isu

String dalam Go tidak boleh diubah, bermakna ia tidak boleh diubah suai di tempatnya. Oleh itu, menukar rentetan kepada kepingan bait menggunakan sintaks []bait(rentetan) menghasilkan salinan memori.

Langkah 2: Menggunakan Tidak Selamat

Untuk mengelakkan ingatan menyalin, operasi yang tidak selamat boleh digunakan. Fungsi Rentetan tidak selamat boleh digunakan untuk mendapatkan penuding kepada data rentetan asas.

<code class="go">import "unsafe"

func unsafeGetBytes(s string) []byte {
    return (*[0x7fff0000]byte)(unsafe.Pointer(
        (*reflect.StringHeader)(unsafe.Pointer(&s)).Data),
    )[:len(s):len(s)]
}</code>
Salin selepas log masuk

Penjelasan:

  • Fungsi rentetan tidak selamat mengembalikan a penunjuk kepada data rentetan.
  • Penunjuk dilemparkan ke tatasusunan bait yang besar ([0x7fff0000]bait). Go membenarkan penghantaran yang tidak selamat ke tatasusunan saiz yang tidak ditentukan.
  • Tatasusunan kemudiannya digunakan untuk membuat kepingan bait dengan panjang yang sama dengan rentetan.

Pertimbangan Tambahan:

Memampatkan set data yang besar menggunakan gzip berkemungkinan akan membayangi keuntungan prestasi daripada mengelakkan salinan memori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Sepotong Bait daripada Rentetan dalam Go Tanpa Menyalin Memori?. 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