1 回答

TA貢獻1801條經(jīng)驗 獲得超16個贊
堆棧溢出
尋求調試幫助的問題(“為什么這段代碼不起作用?”)必須包括所需的行為、特定問題或錯誤以及在問題本身中重現(xiàn)它所需的最短代碼。
您的基準無效。這是不完整的。這是不可復制的。
在 Go 中,使用testing
包來對代碼進行基準測試。例如,
package main
import (
"math/rand"
"testing"
)
func findFirstDoubleFrequency(freqs []int) int {
seen := map[int]bool{0: true}
freq := 0
for {
for _, f := range freqs {
freq += f
if seen[freq] == true {
return freq
}
seen[freq] = true
}
}
}
func BenchmarkFirstFrequency(b *testing.B) {
freqs := make([]int, 1000)
for i := range freqs {
freqs[i] = rand.Intn(len(freqs)/10)
}
b.ReportAllocs()
b.ResetTimer()
for N := 0; N < b.N; N++ {
findFirstDoubleFrequency(freqs)
}
}
輸出:
$ go test t94_test.go -bench=.
goos: linux
goarch: amd64
BenchmarkFirstFrequency-4 1000000 7206 ns/op 3342 B/op 16 allocs/op
$
警告:你有一個可能的無限循環(huán):
package main
import (
"math/rand"
"testing"
)
func findFirstDoubleFrequency(freqs []int) int {
seen := map[int]bool{0: true}
freq := 0
for {
for _, f := range freqs {
freq += f
if seen[freq] == true {
return freq
}
seen[freq] = true
}
}
}
func BenchmarkFirstFrequency(b *testing.B) {
freqs := make([]int, 1000)
for i := range freqs {
freqs[i] = rand.Intn(len(freqs))
}
b.ReportAllocs()
b.ResetTimer()
for N := 0; N < b.N; N++ {
findFirstDoubleFrequency(freqs)
}
}
輸出:
$ go test t94_test.go -bench=.
goos: linux
goarch: amd64
BenchmarkFirstFrequency-4 fatal error: runtime: out of memory
- 1 回答
- 0 關注
- 173 瀏覽
添加回答
舉報