【发布时间】:2015-11-29 16:14:44
【问题描述】:
在 Go 中,当使用 make 语句时, 例如,分配兆字节的内存
make([]byte, 1024*1024*d)
有没有办法在请求更多内存之前确定有多少内存可用?
【问题讨论】:
-
没有,如果有也无济于事。重新设计您的解决方案。
-
没有。可用的内容取决于内核,并且可能会在您请求时更改。
-
另请注意,一些流行操作系统的内核无论如何都会向您的进程谎报可用内存的实际数量——这称为"overcommitting"。
-
哦,当我们谈到它时,IUUC 是参考 Go 实现(称为
gc,源自 Google - 而不是gccgo,它是 GCC 的一部分)当它要求操作系统“保留”一大堆连续内存然后使用这个块进行分配时使用所谓的“竞技场”分配——参见this code 从第 231 行开始。基本上这就是为什么即使是小的 Go 程序也会出现就像使用大量的虚拟内存,而他们只使用适量的物理内存。
标签: go