栈内存和堆内存

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

(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 堆

相关推荐

  1. 内存

    2024-03-24 08:42:06       18 阅读
  2. 第七讲 对象的基本组成-引用-内存-

    2024-03-24 08:42:06       17 阅读
  3. C++中的内存定义以及区别

    2024-03-24 08:42:06       5 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 08:42:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 08:42:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 08:42:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 08:42:06       18 阅读

热门阅读

  1. Openharmony

    2024-03-24 08:42:06       19 阅读
  2. Android 静默安装成功后自启动

    2024-03-24 08:42:06       22 阅读
  3. C++ 的标准模板库(STL)常用算法介绍

    2024-03-24 08:42:06       17 阅读
  4. Python学习(二):python常用命令

    2024-03-24 08:42:06       16 阅读
  5. Superset二次开发之 配置Docker

    2024-03-24 08:42:06       15 阅读
  6. Kafka系列之:Kafka Connect REST API

    2024-03-24 08:42:06       18 阅读
  7. go实现协程池

    2024-03-24 08:42:06       17 阅读
  8. 前端框架是什么

    2024-03-24 08:42:06       16 阅读
  9. 上位机开发 halcon坐标转轴坐标

    2024-03-24 08:42:06       14 阅读
  10. 区块链与智能合约

    2024-03-24 08:42:06       17 阅读