一个进程结束以后,还保留着其内存空间,这样的机制是计算机用户不希望看到了,也没有什么用途。当然这里指的是用户级别的应用,所以操作系统不会设计成这个样子。
每一个进程都运行在一个独立的4GB“地址空间”当中 这个4G只是逻辑上的,物理内存不可能有这么多, 这个“地址空间”中,内核占掉了高位的2G, 用户就用低位的2G 了,用malloc 来管理 在用户程序的堆中分配一个指定大小的空间,并告诉系统的内存管理模块:“我要使用这块空间!” 那么,系统的内存管理模块究竟做了些什么呢? 熟悉Intel 80x86编程的人应该容易理解,它其实只做一件事:把应用程序的虚拟地址空间映射到真实的物理地址(或者磁盘上的分页文件) 所以说,不管用户程序怎么malloc,在进程结束的时候,其虚拟地址空间就会被直接销毁,操作系统只需要在进程结束的时候 让内存管理模块把分页文件中与此进程相关的记录全部删除,标记为“可用空间”, 就可以使所有申请的内存都一次性地回收,根本没有什么麻烦.
简单说,malloc 的分配都是假的,malloc 的请求系统都知道,程序退出时,系统会回收malloc 的所有资源。 But,有些内存系统是回收不了的。 例如运行于内核级的驱动造成的内存错误等, 这些是系统所管不了的。 这种错误,重启程序是没有效果的。必须重启电脑才能解决。