prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.24

Q程序退出前必须释放已分配的内存吗?


A你不应该这样做。一个真正的操作系统会在程序退出时彻底回收所有内存和其他资源;操作系统不能容忍内存的完整性依赖于随机程序的行为。(严格来说,这甚至不是free将内存返回给操作系统的职责;请参阅问题 7.25。) 尽管如此,据说一些个人电脑除非在退出前释放内存,否则无法可靠地回收内存,而从 ANSI/ISO C 标准中可以推断出,这是一个“实现质量问题”。

另一方面,C 库free函数很少将内存返回给操作系统(请参阅问题 7.25),因此调用free无论如何都不是保证退出程序的内存能够被系统回收的方法。

无论如何,显式释放所有内存可以被视为一种良好的做法——例如,以防程序被重写以多次执行其主要任务(可能是在图形用户界面下)。[脚注] 另一方面,有些程序(例如解释器)在退出时才知道它们不再使用的内存(即哪些内存可以被释放),由于退出时应该释放所有内存,因此程序显式释放所有内存将是一项不必要、可能昂贵且容易出错的练习。

其他链接: 进一步解释

参考: ISO Sec. 7.10.3.2


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管