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 關注
- 200 瀏覽
添加回答
舉報