在检查 GO 中内存分配的性能时,我偶然发现了一件有趣的事情。
package main
import (
"fmt"
"time"
)
func main(){
const alloc int = 65536
now := time.Now()
loop := 50000
for i := 0; i<loop;i++{
sl := make([]byte, alloc)
i += len(sl) * 0
}
elpased := time.Since(now)
fmt.Printf("took %s to allocate %d bytes %d times", elpased, alloc, loop)
}
我在 Core-i7 2600 上运行它,Go 版本为 1.6 64 位(在 32 位上也有相同的结果)和 16GB 的 RAM(在 WINDOWS 10 上),所以当 alloc 是 65536(正好是 64K)时,它会运行 30 秒(!!!!! )。当 alloc 为 65535 时,大约需要 200 毫秒。有人可以向我解释一下吗?我在家里用我的核心 i7-920 @ 3.8GHZ 尝试了相同的代码,但它没有显示相同的结果(两者都花了大约 200 毫秒)。任何人都知道发生了什么?
长风秋雁
慕森卡
叮当猫咪
相关分类