Skip to content

Goのmapはboolとstruct{}でメモリ効率の差は小さい

mapchanなどで、空の構造体を扱うときがある。

var (
m map[string]struct{}
c chan struct{}
)

struct{}のサイズは0なので、確かにメモリ効率はboolと比べても良くなるが、Russの発言1によると、もともとmapのバケットを管理するための値も持っているので、64bit環境でも数%の節約にしかならないらしい。

それよりも、boolは2値を持つので、値の意味を考えなくてもよいところが重要かなと思う。

  1. https://groups.google.com/g/golang-nuts/c/_qilWYJS81Y/m/3ZeqcWoZDwAJ