动态分配内存,不释放,程序退出后会被系统回收吗

来源:互联网 发布:伴随矩阵怎么求例子 编辑:程序博客网 时间:2024/04/30 06:42
每一个进程都运行在一个独立的4GB“地址空间”当中
这个4G只是逻辑上的,物理内存不可能有这么多,
这个“地址空间”中,内核占掉了高位的2G, 用户就用低位的2G 了,用malloc 来管理
在用户程序的堆中分配一个指定大小的空间,并告诉系统的内存管理模块:“我要使用这块空间!”
那么,系统的内存管理模块究竟做了些什么呢?
熟悉Intel 80x86编程的人应该容易理解,它其实只做一件事:把应用程序的虚拟地址空间映射到真实的物理地址(或者磁盘上的分页文件)
所以说,不管用户程序怎么malloc,在进程结束的时候,其虚拟地址空间就会被直接销毁,操作系统只需要在进程结束的时候
让内存管理模块把分页文件中与此进程相关的记录全部删除,标记为“可用空间”,
就可以使所有申请的内存都一次性地回收,根本没有什么麻烦.

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

但是,有些内存系统是回收不了的。
例如运行于内核级的驱动造成的内存错误等, 这些是系统所管不了的。
这种错误,重启程序是没有效果的。必须重启电脑才能解决。

0 0
原创粉丝点击