首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

程序末后 free 指针的意义

2012-08-21 
程序末尾 free 指针的意义?很多的程序,在退出前一般都会 free 一些指针.但据我所知, 程序结束后分配给它的

程序末尾 free 指针的意义?
很多的程序,在退出前一般都会 free 一些指针.但据我所知, 程序结束后分配给它的内存会自动释放的.
如此的话, 在末尾 free 岂不是没有必要?

[解决办法]

探讨
很多的程序,在退出前一般都会 free 一些指针.但据我所知, 程序结束后分配给它的内存会自动释放的.
如此的话, 在末尾 free 岂不是没有必要?

[解决办法]
有的工具可以检查内存泄露,也就是申请后未释放的内存它能够提示。

有些内存申请后就要一直用到程序结束。但是如果不在推出前释放他们的话,内存检查工具就会认为是内存泄露。
机器是很笨的,你知道。
所以在退出前释放一下,内存检查工具就不会觉得是内存泄露。
不知道我解释的清楚不?
[解决办法]
还有一种情况:
《Windows编程启示录》
19.6 为什么有些进程在被终止之后还停留在任务管理器中
当某个进程结束时(可能是正常结束,也可能是因为调用了像TerminateProcess之类的函数),这个进程的用户态模块将被删除。但内核态模块只有在与线程相关的所有驱动程序执行完成之后才会被删除。
例如,如果某个线程正处于I/O操作中,那么将会给负责I/O的驱动程序发送一个内核信号来取消这个操作。
如果驱动程序的行为是良好的,那么它将清除与这个未完成I/O相关的一些信息并且释放线程。
如果驱动程序的行为是不好的(可能是因为驱动程序管理的硬件表现出奇怪的行为),那么可能需要花很长的时间来清除这个未完成的I/O。在这段时间里,驱动程序将不会释放这个线程(以及这个线程所在的进程)。实际的情况要更复杂一些,但这里的简单模型对于我们的讨论已经足够。
……
换句话说,如果你终止了某个进程后还能在任务管理器中看到这个进程,那么实际上这个进程已经停止运行了,只不过还有些残留的信息保留在系统中,只有当与这个进程相关的所有驱动程序都完成了清除操作并且指向这个进程的句柄都已经关闭,进程才会完全消失。

热点排行