package main import ( "fmt" "runtime" "time" ) // noPrealloc 未预分配容量,频繁扩容 func noPrealloc() { var data []int for i := 0; i < 100000; i++ { data = append(data, i) } } // withPrealloc 预分配容量,无扩容 func withPrealloc() { data := make([]int, 0, 100000) // 预分配容量100000 for i := 0; i < 100000; i++ { data = append(data, i) } } func main() { var stats runtime.MemStats // 测试未预分配 runtime.GC() start := time.Now() noPrealloc() dur1 := time.Since(start) runtime.ReadMemStats(&stats) fmt.Printf("未预分配:耗时%v,堆分配%d KB,GC次数%d\n", dur1, stats.HeapAlloc/1024, stats.NumGC) // 测试预分配 runtime.GC() start = time.Now() withPrealloc() dur2 := time.Since(start) runtime.ReadMemStats(&stats) fmt.Printf("预分配:耗时%v,堆分配%d KB,GC次数%d\n", dur2, stats.HeapAlloc/1024, stats.NumGC) }