我正在创建一个控制台程序,该程序将具有一些线程和套接字等资源。
当用户关闭控制台程序时,我应该检测到此关闭事件并释放那些资源,还是可以让操作系统处理此事件?
知名控制台程序(例如Linux中的ls
,cat
,grep
)在退出时是否释放其资源?
我的问题不是关于单个操作系统(我的控制台程序将在Windows,Linux和macOS上运行)。
答案 0 :(得分:3)
当用户关闭控制台程序时,我应该检测到此关闭事件并释放那些资源,还是可以让操作系统处理此事件?
重复使用良好的代码。今天的情况是“关闭控制台程序”,明天的情况可能是“从函数返回” Christopher_console program()
。
计划重用和关闭/释放已分配的资源。
答案 1 :(得分:3)
其他两个答案(因此Luke's one和chux' one)都有意义。这是一个观点问题。
但是清理混乱可以简化valgrind的调试。
如果您的程序足够严重,需要大量调试,则可能需要这样做。如果您出于性能原因选择避免清除(例如Luke的方法),则可能会有一些罕见的--cleanup-the-mess
程序选项会强制执行(并努力使valgrind
保持快乐)...
但是,如果您编写的内容在概念上与高视角行为类似,则类似于()(Linux程序:) cron
,bash
,guile
,{{1 }},make
,xslt
,tidy
,indent
等,因此您将要运行的Shell程序或任何类型的交互式解释器(在大多数情况下)仅几分钟,您就可以合理地决定采用卢克的方法。另一方面,如果编写的程序运行时间较长(例如,某些专用服务器),则肯定要避免每次内存泄漏(并且需要使用convert
)。
答案 2 :(得分:1)
通常它不是必需的,并且让操作系统来处理它更快。从GNU coreutils source的简要介绍中,许多程序在遇到错误时会简单地调用die(),并立即退出进程。
答案 3 :(得分:0)
在某些系统中,共有一个c运行时,这意味着c程序共享某些资源,因此一个程序中的资源泄漏会影响其他应用程序。因此,至关重要的是所有应用程序都释放不使用的内容。 What is the C runtime library?
在CRT上有很好的讨论