Rumah >pembangunan bahagian belakang >Golang >Struktur Kosong lwn. Antara Muka Kosong dalam Peta Go: Manakah Lebih Cekap Memori?

Struktur Kosong lwn. Antara Muka Kosong dalam Peta Go: Manakah Lebih Cekap Memori?

Patricia Arquette
Patricia Arquetteasal
2024-12-18 19:34:10971semak imbas

Empty Struct vs. Empty Interface in Go Maps: Which is More Memory Efficient?

Pertimbangan Kecekapan Memori: Antara Muka Kosong lwn. Struktur Kosong dalam Peta

Seseorang mungkin tertanya-tanya tentang perbezaan antara menggunakan antara muka kosong dan kosong struct sebagai nilai dalam peta apabila ingin meniru set dalam Go. Mari kita selidiki perbezaan penggunaan memori yang timbul daripada pilihan ini.

Pertimbangkan jenis berikut:

type MyType uint8

Untuk mensimulasikan set, seseorang mungkin menggunakan binaan berikut:

map[MyType]interface{}

Walau bagaimanapun, perlu diperhatikan bahawa seseorang juga boleh menggunakan struct kosong sebaliknya:

map[MyType]struct{}

Faedah utama menggunakan struct kosong ialah penggunaan memori yang berkurangan berbanding antara muka kosong. Contoh berikut menunjukkan perbezaan ini:

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var s struct{}
    fmt.Println(unsafe.Sizeof(s))
    var i interface{}
    fmt.Println(unsafe.Sizeof(i))
}

Output (bait untuk seni bina 32-bit):

0
8

Output (bait untuk seni bina 64-bit):

0
16

Seperti yang ditunjukkan oleh keputusan, struct kosong menduduki sifar bait memori, manakala antara muka kosong menggunakan sama ada 8 atau 16 bait bergantung pada seni bina.

Oleh itu, jika kecekapan memori adalah pertimbangan yang penting, memilih struct kosong kerana nilai dalam peta anda ialah pilihan yang bijak.

Atas ialah kandungan terperinci Struktur Kosong lwn. Antara Muka Kosong dalam Peta Go: Manakah Lebih Cekap Memori?. 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