内存的申请与释放

首先我们有两个问题

  • malloc()申请1G的内存能否成功?判断依据是什么?
  • 申请了一块空间没有free,进程就结束了,那么空间被回收了吗?

我们写一段代码来申请1G空间试一试

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>

int main()
{
	char *s = (char*)malloc(1024*1024*1024);
	assert(s! NULL);

	printf("main over\n");
	exit(0);
}

这是我们执行程序前的资源情况
在这里插入图片描述
这是运行程序后
在这里插入图片描述
我们发现好像并没有太大的区别产生,这是因为我们申请内存后会在虚拟内存上进行划分,但是只有在真的使用这块空间的时候才会真正在分配物理内存

我们将代码进行修改

memset(s,0,1024*1024*1024);

我们添加这样一段代码,让我们申请到的空间进行清零
再次执行
在这里插入图片描述
内存占用增加,随后程序结束,内存释放 (运行过程中,需要对不用的空间进行free,而程序结束会自动将占用的内存释放)

如果我们申请超过内存大小的空间呢

在这里插入图片描述
假如我们内存空间不够用了,系统会将一部分不用内容存放在虚拟内存上,但是当程序结束后,外存上存储的一部分依旧还在,为什么程序结束不把那一部分调回来呢?系统在使用这部分内容时候才会将将其调回来,否则系统是不会随便操作的,防止内存空间再次不足

swapoff -a 停止虚拟内存交换空间命令

如果我们停掉虚拟内存,再去使用程序去申请大于内存的空间,这时会直接运行失败

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值