哪个是最有效的零值?

时间:2017-06-20 17:22:37

标签: performance go

你在做一些练习时我遇到过这个问题...... 假设你有一张容量为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{}{}
    }
}

正如您所看到的那样(大部分时间)是最快的类型struct{}{} - 空结构。

  • 但为什么就是这种情况?
  • 是否有更快/更轻的零或非零值?


- 感谢您的时间:)

1 个答案:

答案 0 :(得分:4)

理论上,struct{}{}应该是最有效的,因为它不需要记忆。在实践中,a)结果可能因Go版本,操作系统和系统架构而异; b)我无法想到最大化空值的执行时效率的任何情况。