在附加到[][]string
分析时显示该应用使用了大约145MiB的内存。
defer profile.Start(profile.MemProfile).Stop()
f, _ := os.Open("test.csv") // 100 MiB File
r := csv.NewReader(f)
var records [][]string
for {
values, err := r.Read()
if err == io.EOF {
break
}
records = append(records, values)
}
将切片存储在结构中并附加应用程序使用大约260MiB的内存时。
defer profile.Start(profile.MemProfile).Stop()
type record struct {
values []string
}
f, _ := os.Open("test.csv") // 100 MiB File
r := csv.NewReader(f)
var records []record
for {
values, err := r.Read()
if err == io.EOF {
break
}
r := record{values: values}
records = append(records, r)
}
在第二个示例中,感觉好像正在使用两倍的内存。有人可以解释为什么第二个示例使用更多的内存吗?