Maison >développement back-end >Golang >Structure vide ou interface vide dans Go Maps : quelle est la mémoire la plus efficace ?

Structure vide ou interface vide dans Go Maps : quelle est la mémoire la plus efficace ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 19:34:10954parcourir

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

Considérations sur l'efficacité de la mémoire : interface vide ou structure vide dans Maps

On peut s'interroger sur la distinction entre l'utilisation d'une interface vide et d'une interface vide struct comme valeur dans une carte lorsque l’on cherche à émuler un ensemble dans Go. Examinons les différences d'utilisation de la mémoire qui découlent de ce choix.

Considérons les types suivants :

type MyType uint8

Pour simuler un ensemble, on peut utiliser la construction suivante :

map[MyType]interface{}

Cependant, il convient de noter que l'on peut également utiliser une structure vide à la place :

map[MyType]struct{}

Le principal avantage L'utilisation d'une structure vide réside dans son utilisation réduite de la mémoire par rapport à une interface vide. L'exemple suivant illustre cette différence :

package main

import (
    "fmt"
    "unsafe"
)

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

Sortie (octets pour l'architecture 32 bits) :

0
8

Sortie (octets pour l'architecture 64 bits) :

0
16

Comme les résultats l'indiquent, une structure vide occupe zéro octet de mémoire, tandis qu'une interface vide consomme 8 ou 16 octets selon l'architecture.

Par conséquent, si l'efficacité de la mémoire est une considération cruciale, opter pour une structure vide comme valeur dans votre carte est un choix judicieux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn