码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • go栈内存管理


    堆和栈都是编程语言里的虚拟概念,并不是说在物理内存上有堆和栈之分,
    两者的主要区别是栈是每个线程或者协程独立拥有的,从栈上分配内存时不需要加锁。
    而整个程序在运行时只有一个堆,从堆中分配内存时需要加锁防止多个线程造成冲突,
    同时回收堆上的内存块时还需要运行可达性分析、引用计数等算法来决定内存块是否能被回收,
    所以从分配和回收内存的方面来看栈内存效率更高。

    堆空间:make或者new
    堆区的内存一般由编译器和工程师自己共同进行管理分配,交给 Runtime GC 来释放。
    堆上分配必须找到一块足够大的内存来存放新的变量数据。
    后续释放时,垃圾回收器扫描堆空间寻找不再被使用的对象。
    Anytime a value is shared outside the scope of a function’s stack frame,
    it will be placed (or allocated) on the heap.
    (内存逃逸)

    栈:每个goroutine都有自己的栈,大小2kB,由编译器自动分配和释放

    变量到底分配堆还是栈上?
    从正确的角度来看,你不需要知道。Go 中的每个变量只要有引用就会一直存在。
    变量的存储位置(堆还是栈)和语言的语义无关。

    尽可能分配栈上

    go build -gcflags ‘-m’
    go perfromance

    逃逸案例

    很多case会出现逃逸

    连续栈

    (内联优化,将小函数copy到整体中,减少函数调用保存变量和切换上下文的消耗)
    分段栈会导致频繁的alloc和free,而连续栈采用扩容并复制旧栈内容的方式来避免这种情况。

    栈扩容

    递归调用是否插入morestatck

  • 相关阅读:
    外汇交易新手福利:入门必看,快速提升交易技能
    gRPC 健康检查
    试题一 (软件设计师笔记)(15分)
    后端返回 date 时间日期格式为 UTC 格式字符串,形如 2022-08-11T10:50:31.050+00:00前端如何修改为yyyy-mm-dd
    Android 12 adb 串口指令设置耳机音量适配
    每日一题——替换空格
    excel表中复制粘贴有隐藏行的情况
    淘宝数据采集接口
    ardupilot 日志分析《xKF1信息》
    Ansible Automation Platform - 用 Ansible Navigator 开发测试 Playbook
  • 原文地址:https://blog.csdn.net/Zerore/article/details/125432527
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号