1个G的slice,实际内存占用相差甚远的原因

来源:1-13 Go 语言的内存管理与垃圾回收

快哉快哉

2021-06-07 10:55:05

​package main

import "time"

func main() {
a := make([]int,2<<30)
_ = a
time.Sleep(time.Hour)
}

上面应该是分配了1个G的 slice


http://img.mukewang.com/climg/60bd88cd09fc53ba08600132.jpg

看到的是500多M


请问下这种现象和操作系统(linux/window/macOs)是否有区别?以及少去的400多M大致的原因。

写回答

1回答

Xargin

2021-06-07

操作系统是惰性分配内存的,没有访问到的地址可能要访问触发缺页中断才会真正分配

比如你在go里make一个1gb的slice但是从来不访问,就不会真的分配1gb

和不同系统的内存分配策略也确实有关系

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程