0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

谁才是管理内存的大BOSS

jf_78858299 来源:码农的荒岛求生 作者:码农的荒岛求生 2023-02-17 14:26 次阅读

对于C/C++程序员来说,内存分配再正常不过,C语言中的malloc:

int* a = (int*)malloc(sizeof(int));

C++中的new:

int* a = new int(10);

接下来的问题是变量a占用的内存是谁给我们分配的呢?

答案是运行在用户态的内存分配器,如果你愿意,也可以绕过内存分配器自己来管理内存。

接下来的问题是a占用的内存在哪里呢?

答案是进程地址空间中的堆区,堆区在这里:

图片

内存中真的有像图中这样的布局吗?

答案是: 没有

这就是所谓的虚拟内存。

既然是虚拟内存那么这里的堆区又是从哪里来的呢?

答案是操作系统

当我们在C/C++中分配内存时,内存分配器从堆区中找到可用内存,但如果没有找到则向操作系统申请。

那么操作系统又是从哪里找到的内存呢?

答案是:操作系统从物理内存中找到一块可用内存分配出去。

问题来了,既然操作系统管理的是物理内存,而操作系统分配给进程的又是虚拟内存,精神分裂啊有没有,这是怎么一回事呢?

原来这并不冲突,操作系统会为每个进程分配一张表,记录了从虚拟内存到物理内存的映射,这张表就叫页表。

图片

因此,尽管操作系统管理的是物理内存,但进程或者说程序员是看不到物理内存的,我们只能看到虚拟内存,程序运行时在发送内存读写指令时MMU会将虚拟内存转换为物理内存。

接下来的问题是页表在哪里?

答案是: 在内存中

你可以将页表放在内存中的任何位置上,只要能告诉CPU在哪里即可。

谁来负责构造页表呢?答案是操作系统,操作系统负责创建页表,页表本质上就是一个数组,处理器规定页表的格式,操作系统按照这种格式构建好页表,创建好后即可告诉CPU。

该怎样告诉CPU呢?

答案是:通过写特定的寄存器

CPU中有特定的寄存器,以x86处理器为例,其中的控制寄存器cr3就用来保存页表的地址,假设指针pagetable指向页表,那么可以这样设置:

mov   $(pagetable), %eaxmov   %eax, %cr3

pagetable必须是物理地址,页表本身就用来将虚拟地址转为物理地址,因此向cr3中写入虚拟地址是没有道理的。

接下来的问题是什么时候将页表写入cr3寄存器呢?

答案是:很多时候,操作系统初始化阶段、进程切换时等。

现在你应该知道了吧,其实内存管理(段式管理、页式管理)是处理器提供的一种机制,操作系统只是这种机制的使用者,我们常说的虚拟内存是处理器本身的一种能力, 如果处理器本身不提供这种能力,那么操作系统自己是很难高效实现虚拟内存的

CPU才是管理内存真正的大boss。

实际上如果你去看类似x86这样的处理器编程手册时就会发现,我们在操作系统课中熟悉的很多概念其实是处理器这种硬件提供的,操作系统仅仅是利用这些硬件的一层软件。

因此,从这个角度看,操作系统仅仅是CPU的一个“驱动程序”而已。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10851

    浏览量

    211531
  • 内存
    +关注

    关注

    8

    文章

    3017

    浏览量

    73996
  • 分配器
    +关注

    关注

    0

    文章

    193

    浏览量

    25746
收藏 人收藏

    评论

    相关推荐

    Linux的内存管理是什么,Linux的内存管理详解

    Linux的内存管理 Linux的内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理
    的头像 发表于 05-11 17:54 6027次阅读
    Linux的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>是什么,Linux的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    电子发烧友到底谁是大侠?才是真正的高手?

    本帖最后由 会飞的鸭子 于 2014-4-2 16:59 编辑 选出才是真正的高手,才是大牛!吴鉴鹰单片机项目详细解析系列(连载)之基于单片机的实战项目社区之星-单片机达人-
    发表于 04-01 13:29

    工业以太网与现场总线才是主流?

    现场总线、以太网、无线技术各有优劣,那么才会是未来的主流呢?显然对所有生产商或机器并非只有一种技术才是“正确的”方案?生产商必须权衡各类方案带来的价值。有没有比采用普通方案带来的利益更有
    发表于 09-29 09:49

    华为、苹果、三星、高通才是SOC的无冕之王?

    四大旗舰处理器相继曝光,华为、苹果、三星、高通才是SOC的无冕之王?
    发表于 06-03 14:41

    内存管理概述及原理

    记录一下,方便以后翻阅~主要内容:1) 内存管理概述及原理;2)相关实验代码解读。官方资料:《STM32中文参考手册_V10》-第19章 灵活的静态存储器控制器(FSMC)。实验要求:系统启动后
    发表于 02-23 06:15

    如何分辨才是真正的工程师?

    有时候你会想弄清楚某位工程师的基本技术能力与背景,到底才是拥有“真才实料”的真正工程师,谁又只会在那里自我吹嘘。
    发表于 02-07 10:27 1498次阅读

    揭秘手机为什么卡?才是决定手机卡顿的关键

    处理器、内存、GPU才是决定手机卡顿的关键安卓手机使用一段时间后会出现卡顿,相信不少用户都遇到过。
    发表于 04-01 10:43 1.4w次阅读

    iPhone7、iPhone8、iPhone7plus才是最值得买

    苹果手机价格相差很大,特别是新款,更是被炒得火热,iPhone7、iPhone8、iPhone7plus才是最值得买?那款才是最值得买的iPhone?苹果手机凭借着出色的系统体验,以及强大的品牌
    发表于 03-13 14:45 8.6w次阅读

    充电桩还是换电站才是市场的未来

    最近一段时间,随着特斯拉的轮番降价,新能源汽车的普及显得越来越容易,面对着新能源汽车的发展,一个重要的问题摆在大家的问题,从充电桩到换电站,才是新能源汽车的真正未来?
    的头像 发表于 11-16 16:33 4363次阅读

    到底才是顶级旗舰?

    到底才是顶级旗舰?自从骁龙888手机上市之后,这个问题就很难有答案。因为不少人强调,骁龙888真的翻车了,骁龙865依然能打。那真是这样吗?其实看看跑分就有答案,安兔兔公布了今年1月的旗舰手机跑分,从跑分情况来看,骁龙888稳坐第一还是没悬念的,只不过最大的问题,也许是
    的头像 发表于 02-04 17:08 1671次阅读

    什么是内存管理?如何进行内存管理?及内存管理的方案与分析

    前面已经将所有的硬件驱动实现,验证了硬件功能。但是每一个硬件都是单独测试的,而且并不完善。下一步,我们需要对各个驱动进行整合完善。在整合之前,需要做一些基础工作。其中之一就是实现内存管理。什么叫内存
    的头像 发表于 03-26 13:38 7160次阅读
    什么是<b class='flag-5'>内存</b><b class='flag-5'>管理</b>?如何进行<b class='flag-5'>内存</b><b class='flag-5'>管理</b>?及<b class='flag-5'>内存</b><b class='flag-5'>管理</b>的方案与分析

    STM32内存管理

    内存管理详解1、介绍内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和
    发表于 12-24 19:37 13次下载
    STM32<b class='flag-5'>内存</b><b class='flag-5'>管理</b>

    智慧家庭系列文章 | 控制权大作战:才是智能家居系统的控制中心?

    智慧家庭系列文章 | 控制权大作战:才是智能家居系统的控制中心?
    发表于 10-31 08:23 0次下载
    智慧家庭系列文章 | 控制权大作战:<b class='flag-5'>谁</b><b class='flag-5'>才是</b>智能家居系统的控制中心?

    才是最有发展前途的封装材料呢?

    目前,常用电子封装陶瓷基片材料包括氧化铝(Al2O3)、氮化铝(AlN)、氮化硅(Si3N4)、氧化铍(BeO)、碳化硅(SiC)等。那么,才是最有发展前途的封装材料呢?
    的头像 发表于 04-13 10:44 1242次阅读

    Linux 内存管理总结

    一、Linux内存管理概述 Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩
    的头像 发表于 11-10 14:58 522次阅读
    Linux <b class='flag-5'>内存</b><b class='flag-5'>管理</b>总结