嗨,做一些练习我碰到过这个问题...
可以说你有一张容量为100,000的地图。
哪个值在最短时间内填充整个地图的效率最高?哪个是最有效的零值?
我跑我自己的一些基准尝试最让我能想到的类型,并且得到的顶部名单是:
Benchmark_Struct-8 200 6010422 ns/op (struct{}{})
Benchmark_Byte-8 200 6167230 ns/op (byte = 0)
Benchmark_Int-8 200 6112927 ns/op (int8 = 0)
Benchmark_Bool-8 200 6117155 ns/op (bool = false)
实例功能:
func Struct() {
m := make(map[int]struct{}, 100000)
for i := 0; i < 100000; i++ {
m[i] = struct{}{}
}
}
正如你所看到的最快的一个(大部分时间)是01型- 空结构。
- 但为什么在这种情况下去?
- 是否有更快/更轻的零值或非零值?
- 感谢您的时间:)
我不认为将大量空值添加到从未使用过的地图是一种常见用例。您基本上只是测试用于扩展不同类型地图的机器代码。如果存在任何差异,整体内存使用情况_might_对于大多数程序更为相关。我个人喜欢有一个bool值,所以'',ok'不需要检查密钥的存在。 – JimB
Theres这种情况下,它可以有用的,但它不相关,因为速度差异并不大。嗯有趣的一点(关于bools)。谢谢。 – Mihailo