2 回答

TA贡献1811条经验 获得超4个赞
make可用于初始化具有预分配空间的映射。它需要一个可选的第二个参数。
m0 := make(map[int]int, 1000) // allocateds space for 1000 entries
分配需要 CPU 时间。如果您知道地图中将有多少条目,您可以为所有条目预先分配空间。这减少了执行时间。这是您可以运行的程序来验证这一点。
package main
import "fmt"
import "testing"
func BenchmarkWithMake(b *testing.B) {
m0 := make(map[int]int, b.N)
for i := 0; i < b.N; i++ {
m0[i] = 1000
}
}
func BenchmarkWithLitteral(b *testing.B) {
m1 := map[int]int{}
for i := 0; i < b.N; i++ {
m1[i] = 1000
}
}
func main() {
bwm := testing.Benchmark(BenchmarkWithMake)
fmt.Println(bwm) // gives 176 ns/op
bwl := testing.Benchmark(BenchmarkWithLitteral)
fmt.Println(bwl) // gives 259 ns/op
}

TA贡献1828条经验 获得超3个赞
来自make
关键字的文档:
映射:根据大小进行初始分配,但结果映射的长度为 0。大小可以省略,在这种情况下,分配的起始大小较小。
因此,就地图而言,使用make
和使用空地图文字没有区别。
- 2 回答
- 0 关注
- 205 浏览
添加回答
举报