内存效率注意事项:映射中的空接口与空结构
人们可能想知道使用空接口和空接口之间的区别当试图在 Go 中模拟集合时,将 struct 作为映射中的值。让我们深入研究这种选择所带来的内存使用差异。
考虑以下类型:
type MyType uint8
要模拟一组,可以使用以下构造:
map[MyType]interface{}
但是,值得注意的是,也可以使用空结构相反:
map[MyType]struct{}
使用空结构的主要好处是与空接口相比,它减少了内存使用量。以下示例演示了这种差异:
package main import ( "fmt" "unsafe" ) func main() { var s struct{} fmt.Println(unsafe.Sizeof(s)) var i interface{} fmt.Println(unsafe.Sizeof(i)) }
输出(32 位架构的字节):
0 8
输出(64 位架构的字节):
0 16
如结果所示,空结构占用 0 字节内存,而空接口占用 8 或 16 字节内存字节数取决于架构。
因此,如果内存效率是一个关键的考虑因素,那么选择空结构作为映射中的值是一个明智的选择。
以上是Go Map 中的空结构与空接口:哪个内存效率更高?的详细内容。更多信息请关注PHP中文网其他相关文章!