662-Linux的内存申请与释放

在这里插入图片描述
我们打开linux的资源管理器
在这里插入图片描述
目前内存有2GB,目前用了200多M,swap分区:2GB(虚拟内存)
虚拟内存—磁盘上的划分的空间,当做内存来用
程序大,内存装不下,有了虚拟内存,把一部分放到虚拟内存上执行,虽然速度慢,但是起码能运行啊!

我们写一个程序,申请1GB空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好像并没有什么变化?
因为我们的malloc申请空间,实际上是在进程的虚拟地址空间说:我们需要1GB的空间,虚拟地址空间会划分一部分给应用程序去使用,真正到去使用这块空间的时候,用到了哪块,才会去分配真正的物理内存。
我们对代码修改一下
memset:把内存空间的值都置为0
在这里插入图片描述
这样的话相当于1GB的内存空间我们都用到了
在这里插入图片描述
我们运行main程序
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
增长到1.2GB,然后退回去了,程序结束
当我们程序申请了1GB的内存空间以后,虽然没有执行free这个操作,但是进程结束了,这个时候内存是会被操作系统回收,因为进程结束了,所有分配给该进程的资源都要回收(属于被动回收)。
程序在运行的过程中,申请一块空间,如果不用了,就要free掉,如果不free,就一直占用着,你不用了,别人也没法用,但是,这个进程如果结束了,所有的资源都会被归还给操作系统。

malloc申请1GB成功的依据

在这里插入图片描述
现在内存是有2GB,所以刚才申请1GB的空间是够用的,如果现在申请2GB呢?操作系统现在本身就占了200多M了,再申请2GB肯定不够啊。
但是,我们来测试看看:

在这里插入图片描述
在这里插入图片描述
编译时,警告可能会越界。
我们来执行一下main程序
在这里插入图片描述
在这里插入图片描述
我们看到,左边的物理内存使用在不断增长:
在这里插入图片描述
现在右边的虚拟内存也在增长了:
在这里插入图片描述
在这里插入图片描述
因为我们的物理内存空间肯定是不够用了,要把一部分搬到虚拟内存空间上运行,在这里插入图片描述
我们把不用的那块先放到虚拟内存上
现在 程序结束了,物理内存空间是使用了113.6M,还有108.3M在外存(虚拟内存)上,程序结束了,为什么不把108.3M从外存上搬回来呢?它是:你用到了,但是它在虚拟内存上,才从虚拟内存上调回来。如果都不用了,然后调回来,等会空间又不够,又要放到外存上,系统不会这么做的。
虽然刚才申请的大小超过了物理内存,但是我们有虚拟内存的支撑,加起来没有超过总大小。

如果把虚拟内存停掉

在这里插入图片描述
把磁盘(虚拟内存)的数据赶回物理内存上。
在这里插入图片描述
现在是不能使用虚拟内存了。我们再运行刚才申请2GB空间的程序
在这里插入图片描述
直接报错,因为空间不够,就剩下1.8GB

所以,我们判断申请空间能不能成功:如果申请的空间的大小比当前物理内存剩余的大小要小,肯定申请成功。
如果物理内存不够,我们看看有没有虚拟内存,如果有虚拟内存,看虚拟内存剩余的空间和物理内存剩余的空间加起来够不够,如果够,也能申请成功!如果不够,或者压根没有虚拟内存,就肯定申请失败了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值