栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

内存的申请与释放

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内存的申请与释放

首先我们有两个问题
  • 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 停止虚拟内存交换空间命令

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号