IT袋

当前位置:主页 > 经验教程 > 硬件教程 >

内存管理:空间分配及逃逸分析

内存管理:空间分配及逃逸分析 内存管理: 分配与逃逸分析

时间:2023-12-22 19:23:12 来源:IT袋 作者:马勇
导读:内存管理:空间分配及逃逸分析,跟大家聊一聊内存管理:空间分配及逃逸分析的话题,如有不对的地方欢迎指正! 1. 引言 内存管理,是开发者在程序编写和调优的过程中不可绕开的话题,也是走向资深程

内存管理:空间分配及逃逸分析

跟大家聊一聊内存管理:空间分配及逃逸分析的话题,如有不对的地方欢迎指正!

1. 引言

内存管理,是开发者在程序编写和调优的过程中不可绕开的话题,也是走向资深程序员必须要了解的计算机知识。

有经验的面试官会从内存管理的掌握程度去考察一个候选人的技术水平,这里面涉及到的知识可能包括操作系统、计算机组成原理以及编程语言的底层实现等。

说到内存,其实就是存储器,我们可以从冯.诺依曼的计算机结构来了解存储器的概念:

内存管理:空间分配及逃逸分析

什么?冯诺依曼你都不知道,是不是和我一样,计算机基础的课程没有好好学呀?

别急!接下来我们由浅入深讲到的内容,就算不了解计算机底层原理的同学也可以弄懂,一起接着往下看吧~

总之,存储器是计算机中不可或缺的一部分,内存管理,其实就是对存储器的存储空间管理。

接下来,我们会从内存分类、以及 Go 语言的内存空间分配上,结合常见的逃逸分析场景,来学习内存管理相关的知识。

2. 虚拟内存

2.1 虚拟内存和物理内存的区别

我们都知道,以前的计算机存储器空间很小,我们在运行计算机程序的时候物理寻址的范围非常有限。

比如,在 32 位的机器上,寻址范围只有 2 的 32 次方,也就是 4G。

并且,对于程序来说,这是固定的,我们可以想象一下,如果每开一个计算机进程就给它们分配 4G 的物理内存,那资源消耗就太大了。

内存管理:空间分配及逃逸分析

资源的利用率也是一个巨大的问题,没有分配到资源的进程就只能等待,当一个进程结束以后再把等待的进程装入内存,而这种频繁地装入内存操作效率也很低。

并且,由于指令都是可以访问物理内存的,那么任何进程都可以修改内存中其它进程的数据,甚至修改内核地址空间的数据,这是非常不安全的。

由于物理内存使用时,资源消耗大、利用率低及不安全的问题。因此,引入了虚拟内存

虚拟内存是计算机系统内存管理的一种技术,通过分配虚拟的逻辑内存地址,让每个应用程序都认为自己拥有连续可用的内存空间。

而实际上,这些内存空间通常是被分隔开的多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

2.2 虚拟内存转换

既然计算机用到的都是虚拟内存,那我们如何拿到真实的物理内存地址呢?答案就是内存映射,即如何把虚拟地址(又被称作逻辑地址)转换成物理地址。

内存管理:空间分配及逃逸分析

在 Linux 操作系统下,内存最先有两种管理方式,分别是页式存储管理和段式存储管理,其中:

  • 页式存储能有效地解决内存碎片,提高内存利用率;
  • 分段式存储管理能反映程序的逻辑结构,并有利于段的共享;

通俗来讲就是内存有两种单位,一种是分页,一种是分段。分页就是把整个虚拟和物理内存空间切割成很多块固定尺寸的大小,虚拟地址和物理地址间通过页表来进行映射:

相关阅读