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

【转载】golang内存分配

Go 的分配采用了类似 tcmalloc 的结构.特点: 使用一小块一小块的连续内存页, 进行分配某个范围大小的内存需求. 比如某个连续 8KB 专门用于分配 17-24 字节,以此减少内存碎片. 线程拥有一定的 cache, 可用于无锁分配.

同时 Go 对于 GC 后回收的内存页, 并不是马上归还给操作系统, 而是会延迟归还, 用于满足未来的内存需求.





在 1.10 以前 go 的堆地址空间是线性连续扩展的, 比如在 1.10(linux amd64)中, 最大可扩展到 512GB. 因为 go 在 gc 的时候会根据拿到的指针地址来判断是否位于 go 的 heap 的, 以及找到其对应的 span, 其判断机制需要 gc heap 是连续的. 但是连续扩展有个问题, cgo 中的代码(尤其是 32 位系统上)可能会占用未来会用于 go heap 的内存. 这样在扩展 go heap 时, mmap 出现不连续的地址, 导致运行时 throw.

在 1.11 中, 改用了稀疏索引的方式来管理整体的内存. 可以超过 512G 内存, 也可以允许内存空间扩展时不连续.在全局的 mheap struct 中有个 arenas 二阶数组, 在 linux amd64 上,一阶只有一个 slot, 二阶有 4M 个 slot, 每个 slot 指向一个 heapArena 结构, 每个 heapArena 结构可以管理 64M 内存, 所以在新的版本中, go 可以管理 4M*64M=256TB 内存, 即目前 64 位机器中 48bit 的寻址总线全部 256TB 内存.





go 的内存分配类似于 tcmalloc, 采用了 span 机制来减少内存碎片. 每个 span 管理 8KB 整数倍的内存, 用于分配一定范围的内存需求.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《JavaEE进阶》----10.<SpringMVC应用分层:【三层架构】>
  • StarRocks 培训课程重磅上线!专家出品,助你升级打怪不走弯路!
  • A Tutorial on Near-Field XL-MIMO Communications Towards 6G【论文阅读笔记】
  • 前端正确设置资源上下文路径ContextPath(发布目录outDir 、公共基础路径),保证打包部署后站点能正常加载资源。
  • Session、Cookies 和 Token 的关系详解
  • 跨国公司研发战略调整与中国IT产业的未来
  • 如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)
  • 操作系统 --- 线程(Threads)概念 多线程模型 线程控制与组织
  • 【Kubernetes】常见面试题汇总(五)
  • 国庆假期出行必备!西圣PB充电宝!外出旅游出行好搭档!
  • 【零基础学习CAPL语法】——on message
  • OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用
  • 威胁建模中的评估问题列表
  • 鸿蒙轻内核A核源码分析系列七 进程管理 (1)
  • nacos 高级 配置管理 动态路由
  • 【Leetcode】101. 对称二叉树
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • HomeBrew常规使用教程
  • IDEA 插件开发入门教程
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript 一些 DOM 的知识点
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js正则,这点儿就够用了
  • js中forEach回调同异步问题
  • mysql 数据库四种事务隔离级别
  • Spring-boot 启动时碰到的错误
  • SQLServer之索引简介
  • Vim Clutch | 面向脚踏板编程……
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 排序算法学习笔记
  • 首页查询功能的一次实现过程
  • 算法-插入排序
  • 网络应用优化——时延与带宽
  • 一个项目push到多个远程Git仓库
  • ​​​【收录 Hello 算法】9.4 小结
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​ubuntu下安装kvm虚拟机
  • # Redis 入门到精通(一)数据类型(4)
  • #DBA杂记1
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)事件处理——(7)简单事件(Simple events)
  • (多级缓存)缓存同步
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm高校实验室 毕业设计 800008
  • (南京观海微电子)——COF介绍
  • (十六)串口UART
  • (十三)Maven插件解析运行机制
  • (五)activiti-modeler 编辑器初步优化
  • (一)RocketMQ初步认识
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (转)程序员疫苗:代码注入