Golang栈空间管理

分段栈

在Go1.3之前,所有goroutine在初始化时都会分配一块固定大小的内存空间。

  • 在固定8KB或者满足其他条件下,会在全局的栈缓存链表中找到空闲的内存块作为新goroutine的栈空间返回
  • 其余情况,会在堆上申请一块合适的内存

所有栈空间会以链表的形式串联起来

分段栈能够按需为当前goroutine分配内存,并及时减少内存占用,但

  • 如果当前goroutine栈几乎充满,那么任意的函数调用都会触发栈扩容,当函数返回后又会触发栈的收缩,如果在一个循环中调用函数,栈的分配和释放就会造成巨大的额外开销,这被称为热分裂问题(Hot split)
  • 一旦 Goroutine 使用的内存越过了分段栈的扩缩容阈值,运行时会触发栈的扩容和缩容,带来额外的工作量

连续栈

连续栈核心原理是当当前栈内存不足时,会触发中断,从而分配更大充足的栈空间,并迁移原栈内容到新栈

迁移过程会被指针也同样迁移过来,不过没关系根据逃逸分析不变性——指向栈对象的指针不能存在于堆中,所以指向栈中变量的指针只能在栈上

与堆类似,栈也有全局和局部栈空间

  • 全局栈空间
    • runtime.stackpool(全局栈缓存):分配小于32KB
    • runtime.stackLarge(全局大栈缓存):分配大于32KB。如果空间不足会在堆上申请
  • 线程缓存:分配小于32KB

此外,除了扩容,连续栈还会在已使用的栈空间未超过了总可用空间的四分之一,将新栈收缩到原来的一半

Ref

  1. https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-stack-management/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hot100 | 六、矩阵

1-leetcode73. 矩阵置零 注意: 注意第一行和第一列如果检查到了0,直接break也可以使用HashSet方法,直接把0的数字对应的横纵坐标放在两个不同的HashSet当中,最后如果HashSet中Contain了当前数字下标中的一个,就直接给…

Amazon SQS应用场景及Python实现案例

1. SQS简介 Amazon Simple Queue Service (SQS) 是一种完全托管的消息队列服务,可以帮助解耦和扩展微服务、分布式系统和无服务器应用程序。SQS 可以在分布式应用程序组件之间传输任何数量的消息,而无需丢失消息或要求其他服务始终可用。 2. SQS应用场景 SQS 在许多场景中…

零基础学python(一)

1. 匿名函数 常规函数: def fun(x, y):return x y 匿名函数: # lambda 空格后面是函数入参,冒号后面写函数体/函数逻辑 a lambda x,y: x y print(a(2,3)) 匿名函数/lambda函数的最大优点就是快速定义函数,使代码更精简。 …

Redis 的缓存淘汰策略

Redis 作为一个高性能的内存数据库,提供了多种缓存淘汰策略(也称为过期策略或驱逐策略),用于管理内存使用。当 Redis 达到其内存限制时,系统会根据配置的策略删除一些数据,以释放内存空间。以下是 Redis 支…

【数据结构】(6.3)堆的应用——堆排序(C语言)

系列文章目录 文章目录 系列文章目录前言1. 堆排序的基础知识2. 堆排序详解2.1 堆排序整体思路2.2 思路详解2.2.1 建堆2.2.2 堆排序完整代码2.2.3 输出数据 3. 时间复杂度分析 前言 1. 堆排序的基础知识 堆排序(Heap Sort)就是对直接选择排序的一种改进…

04通俗理解自注意力机制(self-attention)

04浅谈自注意力机制(self-attention) 1. 基本概念 注意力机制 是Transformer模型的核心。它的作用是让模型能够“关注”输入数据的不同部分,而不是一次只处理一个词。比如,当模型在处理一句话时,它可以同时考虑句子中…

2024攻防演练:亚信安全新一代WAF,关键时刻守护先锋

实网攻防 网络安全如同一面坚固的盾牌,保护着我们的信息资产免受无孔不入的威胁。而其中,WAF就像网络安全的守门员,关键时刻挺身而出,为您的企业筑起一道坚实的防线。 攻防不对等 防守方实时应答压力山大 在攻防对抗中&#xf…

day04-matplotlib入门

matplotlib Matplotlib 提供了一个套面向绘图对象编程的 API接口 是一款用于数据可视化的 Python 软件包,支持跨平台运行 它能够根据 NumPyndarray 数组来绘制 2D(3D) 图像,它使用简单、代码清晰易懂,深受广大技术爱好 者喜爱。 实列&…

Django学习第五天

启动项目命令 python manage.py runserver 图像验证码生成随机字母或者数字 import random from PIL import Image, ImageDraw, ImageFont, ImageFilterdef check_code(width120, height40, char_length5, font_fileZixunHappyBold.ttf, font_size28):code []img Image.new…

liunx离线安装Firefox

在Linux系统中离线安装Firefox浏览器,您需要先从Mozilla的官方网站下载Firefox的安装包,然后通过终端进行安装。以下是详细的步骤: 准备工作 下载Firefox安装包: 首先,在一台可以上网的电脑上访问Firefox官方下载页面…

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 ,测试结果 3.用Json来对其进行数据的传递 (1)Json是一个经常使用的用来表示对象的字符串 (2)Json字符串在字符串和对象…

实证Stata代码命令汇总

实证Stata代码命令汇总 更新时间:2024.4 实证Stata代码命令汇总 (一) 数据导入和管理 1. 数据导入 2. 数据导出

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意: 本项目pdf的ocr对于表格、画图文字,水印等干扰没做任何处理,因此希望各位使用该功能的pdf尽量不要含有这些干扰项,以免影响翻译效果。 流程 1.构建…

【c语言】轻松拿捏自定义类型

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 前言 一、结构体 1.结构体类型的定义和使用 1.1 结构体类型声明 1.2 结构体变量的创建和初始化 1.3 结构体变量成员的访问 1.4 结构体的特殊声…

MobPush iOS端 扩展业务功能设置

1、扩展业务说明 MobPush提供的扩展业务功能为: (1)按照地域提供更为精准的推送; (2)实现网络链路的选择与优化、检测并实现与特定区域相关的服务; (3)生成用户画像&…

三万字带你一遍跑通uer

三万字带你一遍跑通uer 参考文档 今天给大家介绍个非常强大的项目uer,集成了许多可以做自然语言的东西,效果的话也非常好,很适合企业级的应用! 1. 先将项目uer从github拉取下来(zip或git都ok) 2. 用pycha…

HTTP代理服务器:深度解析与应用

“随着互联网的飞速发展,HTTP代理服务器在网络通信中扮演着越来越重要的角色。它们作为客户端和服务器之间的中介,不仅优化了网络性能,还提供了强大的安全性和隐私保护功能。” 一、HTTP代理服务器的概念与作用 HTTP代理服务器是一种能够接…

价值499的从Emlog主题模板PandaPRO移植到wordpress的主题

Panda PRO 主题,一款精致wordpress博客主题,令人惊叹的昼夜双版设计,精心打磨的一处处细节,一切从心出发,从零开始,只为让您的站点拥有速度与优雅兼具的极致体验。 从Emlog主题模板PandaPRO移植到wordpres…

兴业小课堂|什么是法拍房助拍机构?如何挑选靠谱的助拍机构?

随着法拍房市场的不断发展和扩大 使法拍房数量的增加 其交易的复杂性和专业性需求也日益凸显 这促使了专门机构的出现来满足市场需求 法拍房助拍机构存在的原因主要有以下几点: 1.专业知识和经验: 法拍房的交易流程相对复杂,涉及到法律法…

【全网最全ABC三题完整版】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…