龙空技术网

精通go语言 内存管理和GC专题(二)虚拟内存简单的计算

编程牛 106

前言:

当前小伙伴们对“gc语言”大致比较珍视,大家都需要学习一些“gc语言”的相关内容。那么小编同时在网上搜集了一些对于“gc语言””的相关内容,希望你们能喜欢,你们一起来了解一下吧!

上篇写了虚拟内存的范围,其中有几个重要的知识点,比如规范形式的地址。

内存管理和GC是一个很大的迷宫,需要宽泛的知识点,但市面上的资料很少,假如有一个知识盲区就可能看不懂,作者的规划是慢速稳步前进,希望能将每个知识点解释清楚。

地址计算

上篇说明了虚拟地址是48位的,因此范围最大是256T,计算公式是:2^48/1024/1024/1024/1024,相比于平常家用电脑的32G内存,这个还是比较大的。

但是需要注意的是256T的内存空间被分开两块,一块是高地址,一块是低地址,两者范围都是:0x8000 0000 0000。

go管理多大的内存

既然是内存管理,那么go就想全部接手,根据前面的结论可知,go接手的就是256T的内存空间而不是0x0 - 0xFFFF FFFF FFFF FFFF。

在第一步,它将这个范围以4M大小进行分块称为arena。由于作者在windows上调试,所以后面的结论都是基于windows。arena在linux上是64M大小进行分块。这个地方暂时写到这,再转到虚拟内存。

虚拟内存的一些特性

在windows上,内存分配是以页为单位进行的,每页4KB大小。

如图所示,内存分配类比于现实中分房子的情景几乎一样。

分配以4KB的整数倍进行用户可以指定从哪个位置开始分配,这一点很意外,但最坏就是分配失败有保留和提交(commit)等各种申请方式

这些知识点在《核心编程》中有详细说明,作者不再多写。

总结

这篇介绍了虚拟内存究竟多大,go管理多大,以及虚拟内存的一些基本特性,尤其是这一块,需要读者看书,如果不看后面无法进行。

标签: #gc语言