当前位置: 首页 > news >正文

Golang的内存关系

1.Page

Golang的Page,在操作系统对虚拟内存管理的MMU定义的物理页有相似的定义,默认的Page为8KB

2.mSpan

多个连续的Page称之为是一个Span,其定义含义有操作系统的管理的页表相似

3.Size Class

Size Class:  相当于 一个等级和刻度, 比如 第二等级 就代表 一个Page页 8B~16Byte

Object Size: 相当于一个Page的大小,Golang内存管理模块针对内存管理更加细化的内存管理单元

Span Class: 是否需要 GC扫描(Golang的内存回收机制) 

4.MCache

那么把上面三个合并在一起就是MCache了,    在每个协程调度器下都有一个MCache

对于Span Class为0和1的,也就是对应Size Class为0的规格刻度内存,mcache实际上是没有分配任何内存的。因为Golang内存管理对内存为0的数据申请做了特殊处理,如果申请的数据大小为0将直接返回一个固定内存地址,不会走Golang内存管理的正常逻辑

这就是为什么 使用空结构体能节省内存的原因

//第一篇/chapter3/MyGolang/zeroBase.go
package mainimport (
"fmt"
)func main() {
var (
//0内存对象
a struct{}
b [0]int//100个0内存struct{}
c [100]struct{}//100个0内存struct{},make申请形式
d = make([]struct{}, 100)
)fmt.Printf("%p\n", &a)
fmt.Printf("%p\n", &b)
fmt.Printf("%p\n", &c[50])    //取任意元素
fmt.Printf("%p\n", &(d[50]))  //取任意元素
}

5.MCentral与MHeap

注意: MCentral 的访问 和 MHeap的访问 需要加锁

http://www.lryc.cn/news/359619.html

相关文章:

  • VRTK4.0学习——(二)
  • 体验Photoshop:无需下载,直接在浏览器编辑图片
  • Codeforces Round 895 (Div. 3)(A,B,C)题解(自己VP的,没有参加这场比赛)
  • 9秒爬取庆余年2分集剧情
  • 阿里云布置net core 项目
  • 两整数之和 ---- 位运算
  • 长城电脑压缩文件丢失了怎么办?怎么解决
  • 论文笔记《基于深度学习模型的药物-靶标结合亲和力预测》
  • ArrayList和LinkedList对比,ArrayList使用注意事项
  • 小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)
  • 计算机图形学入门02:线性代数基础
  • 函数:计算数组的元素和
  • 如何进行数据库分库分表
  • Spring-Cloud-CircuitBreaker-Resilience4j (3.1.1)
  • 重构与优化-组织数据(3)
  • 游戏交易平台源码游戏帐号交易平台系统源码
  • Matlab里面的浮点数与FPGA定点数的相互转化应用(含Matlab代码,封装成函数可直接调用)
  • 机器学习笔记——欠拟合、过拟合
  • 【二进制部署k8s-1.29.4】七、验证master的安装
  • springboot获取当前数据库连接
  • 【学习笔记】Windows GDI绘图(九)Graphics详解(上)
  • 公告:公众号铁粉粉丝介绍以及说明
  • BioTech - 使用 CombFold 算法 实现 大型蛋白质复合物结构 的组装过程
  • 代码随想录算法训练营第36期DAY46
  • 港湾周评|李小加“刀刃向内”裁员
  • 超大功率光伏并网逆变器学习(三相)
  • 大豆、棉花深度学习数据集大合集
  • 教育数字展馆助力全球教育传播,科技引领数字化教育潮流
  • 14.微信小程序之地理定位功能
  • 理解lambda表达式