进程结束后,进程的所有内存都将被释放,包括堆上的内存泄露的内存

1、进程结束后,进程的所有内存都将被释放,包括堆上的内存泄露的内存。原因是,当进程结束时,GDT、LDT和页目录都被操作系统更改,逻辑内存全部消失,可能物理内存的内容还在但是逻辑内存已经从LDT和GDT删除,页目录表全部销毁,所以内存会被全部收回。

2、不管用户程序怎么malloc,在进程结束的时候,其虚拟地址空间就会被直接销毁,操作系统只需要在进程结束的时候
让内存管理模块把分页文件中与此进程相关的记录全部删除,标记为“可用空间”,就可以使所有申请的内存都一次性地回收,根本没有什么麻烦.
简单说,malloc 的分配都是假的,malloc 的请求系统都知道,程序退出时,系统会回收malloc 的所有资源。
但是,有些内存系统是回收不了的。
例如运行于内核级的驱动造成的内存错误等, 这些是系统所管不了的。
这种错误,重启程序是没有效果的。必须重启电脑才能解决。


举例:

#include   
 const static int const_once = 1024 * 1024 * 10;
int main()
{
	int *a;
	for (int cnt = 0; cnt <= 10; cnt++)
	{
		a = new int[const_once];
		a[10] = 1;
		a[const_once - 10] = 1;
	}

	//system("pause");
	//exit(0);

	while (1)
	{
		switch (getchar())
		{
		case '1':   //按了键盘上的1
			break;
		case '2':
			break;
		case '3':
			break;
		case '4':
			break;
		case '\n':  //按了回车
			exit(0);
		default:
			printf("错误输入!");
			getchar();
		}
	}

    return 0;
}

使用Windows任务管理器,观察内存的变化。

你可能感兴趣的:(C/C++)