内存的申请与释放

内存的申请与释放,第1张

内存申请与释放 首先我们有两个问题
  • malloc()申请1G的内存能否成功?判断依据是什么?
  • 申请了一块空间没有free,进程就结束了,那么空间被回收了吗?

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

#include
#include
#include
#include
#include

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

	printf("main overn");
	exit(0);
}

这是我们执行程序前的资源情况

这是运行程序后

我们发现好像并没有太大的区别产生,这是因为我们申请内存后会在虚拟内存上进行划分,但是只有在真的使用这块空间的时候才会真正在分配物理内存

我们将代码进行修改

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

我们添加这样一段代码,让我们申请到的空间进行清零
再次执行

内存占用增加,随后程序结束,内存释放 (运行过程中,需要对不用的空间进行free,而程序结束会自动将占用的内存释放)

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


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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存