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

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

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


2、不管用户程序怎么malloc,在进程结束的时候,其虚拟地址空间就会被直接销毁,操作系统只需要在进程结束的时候

让内存管理模块把分页文件中与此进程相关的记录全部删除,标记为“可用空间”,就可以使所有申请的内存都一次性地回收,根本没有什么麻烦.

简单说,malloc 的分配都是假的,malloc 的请求系统都知道,程序退出时,系统会回收malloc 的所有资源。

但是,有些内存系统是回收不了的。

例如运行于内核级的驱动造成的内存错误等, 这些是系统所管不了的。

这种错误,重启程序是没有效果的。必须重启电脑才能解决。




举例:

#include <iostream>  
 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任务管理器,观察内存的变化。

相关文章
|
4月前
|
Linux
|
28天前
|
移动开发 Linux
Linux下如何查看哪些进程占用的CPU内存资源最多
Linux下如何查看哪些进程占用的CPU内存资源最多
|
2天前
|
存储 Web App开发 运维
|
8天前
|
消息中间件 Linux
【linux进程间通信(二)】共享内存详解以及进程互斥概念
【linux进程间通信(二)】共享内存详解以及进程互斥概念
|
2月前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
82 0
|
2月前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
25 2
|
2月前
|
存储 安全 Java
【JVM】Java堆 :深入理解内存中的对象世界
【JVM】Java堆 :深入理解内存中的对象世界
56 0
|
2月前
|
存储 缓存 Rust
【Rust】——所有权:Stack(栈内存)vs Heap(堆内存)(重点)
【Rust】——所有权:Stack(栈内存)vs Heap(堆内存)(重点)
23 0
|
2月前
|
Linux 数据安全/隐私保护
进程间通信之共享内存及其shm函数的使用【Linux】
进程间通信之共享内存及其shm函数的使用【Linux】
|
3月前
|
Linux
百度搜索:蓝易云【深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式】
通过以上方法,你可以深入了解Linux进程的内存使用情况,包括VSS、RSS、PSS、USS等指标,帮助你进行性能优化和资源管理。
43 12