2016-03-15 3 views

ответ

0

Из документов для make ключевого слова:

Карта: Начальное распределение производится в соответствии с размером, но результате карта имеет длину 0. Размер может быть опущен, в этом случае a выделяется небольшой стартовый размер.

Таким образом, в случае карт нет разницы между использованием make и использованием пустого символа карты.

6

make может использоваться для инициализации карты с предварительно выделенным пространством. Он принимает необязательный второй параметр.

m0 := make(map[int]int, 1000) // allocateds space for 1000 entries

Распределение занимает много времени центрального процессора. Если вы знаете, сколько записей будет на карте, вы можете выделить место для всех. Это сокращает время выполнения. Вот программа, которую вы можете запустить, чтобы проверить это.

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 
} 
Смежные вопросы