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

栈内存和堆内存

第一、计算机为什么需要内存?

(1)暂存二进制可执行代码文件中的指令、预置数据(常量)等
(2)暂存指令执行过程中的中间数据

第二、为什么需要栈内存?

通过利用「栈内存」,CPU在执行指令过程中可以高效地存储临时变量。是对一段连续内存的「线性分配」。

第三、为什么需要堆内存?

Go语言会在代码编译期间通过「逃逸分析」把分配在「栈」上的变量分配到「堆」上去。

第四、虚拟内存的引出?

(1)以32位计算机为例,寻址的范围是2^32也就是4G,如果每个进程都分配4G大小的内存,则会导致内存不足,后来的进程等待,之后再装入内存,这种频繁的装入内存的操作是很没效率的。
(2)由于指令都是直接访问物理内存的,那么我这个进程就可以修改其他进程的数据,甚至会修改内核地址空间的数据,这是我们不想看到的
(3)程序想要分配一段连续的内存空间时候,物理内存分配往往是不连续的内存碎片。

第五、go分配内存原理

因此一个go进程分配的是虚拟内存。

栈内存分配原则:
(1)小于32KB的栈内存。依次来源:mcache 线程缓存 -> stackpool 全局缓存 -> p.pagecache 逻辑处理器结构 -> mheap 堆
(2)大于等于32KB的栈内存。依次来源:stackpool全局缓存 -> p.pagecache 逻辑处理器结构 -> mheap 堆
堆内存分配原则:
(1)小于16B的堆内存。mcache.tiny 线程的微型分配器 -> mcache.alloc 线程缓存
(2)大于等于16B且小于等于32KB的堆内存。mcache.alloc 线程缓存 -> mcentral 中央缓存 -> p.pagecache逻辑处理器结构 -> mheap 堆
(3)大于32KB的堆内存。p.pagecache逻辑处理器结构 -> mheap 堆

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HCIP-Datacom(H12-821)题库补充(3/26)
  • NTP服务搭建
  • 这回轮到鸿蒙禁用安卓了!!!
  • 【剑指offer】顺时针打印矩阵
  • 1.Git快速入门
  • 数据结构/C++:位图 布隆过滤器
  • 测试缺陷定位的基本方法
  • MATLAB下载+安装教程
  • 如何应对Android面试官->进程通信如何注册与获取服务
  • 逐步学习Go-并发通道chan(channel)
  • 【动态规划】【卡特兰数】Leetcode 96. 不同的二叉搜索树
  • python面试题(1~10)
  • conda删除虚拟环境
  • 如何在MySQL中实现基于时间点的恢复?
  • 【深度学习】基础知识
  • 03Go 类型总结
  • Angular2开发踩坑系列-生产环境编译
  • JAVA_NIO系列——Channel和Buffer详解
  • Java方法详解
  • js面向对象
  • maya建模与骨骼动画快速实现人工鱼
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 仿天猫超市收藏抛物线动画工具库
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于Java中分层中遇到的一些问题
  • 将 Measurements 和 Units 应用到物理学
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前嗅ForeSpider采集配置界面介绍
  • 手写双向链表LinkedList的几个常用功能
  • 湖北分布式智能数据采集方法有哪些?
  • ​马来语翻译中文去哪比较好?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ###STL(标准模板库)
  • #pragma 指令
  • #前后端分离# 头条发布系统
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm码农论坛 毕业设计 231126
  • (一)80c52学习之旅-起始篇
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)平衡树
  • **PHP二维数组遍历时同时赋值
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net mvc部分视图
  • .Net OpenCVSharp生成灰度图和二值图
  • .net 无限分类
  • .net通过类组装数据转换为json并且传递给对方接口