控制台程序在关闭时是否应该释放其资源?

时间:2019-07-04 13:46:23

标签: c operating-system

我正在创建一个控制台程序,该程序将具有一些线程和套接字等资源。

当用户关闭控制台程序时,我应该检测到此关闭事件并释放那些资源,还是可以让操作系统处理此事件?

知名控制台程序(例如Linux中的lscatgrep)在退出时是否释放其资源?

我的问题不是关于单个操作系统(我的控制台程序将在Windows,Linux和macOS上运行)。

4 个答案:

答案 0 :(得分:3)

  

当用户关闭控制台程序时,我应该检测到此关闭事件并释放那些资源,还是可以让操作系统处理此事件?

重复使用良好的代码。今天的情况是“关闭控制台程序”,明天的情况可能是“从函数返回” Christopher_console program()

计划重用和关闭/释放已分配的资源。

答案 1 :(得分:3)

其他两个答案(因此Luke's onechux' one)都有意义。这是一个观点问题。

但是清理混乱可以简化valgrind的调试。

如果您的程序足够严重,需要大量调试,则可能需要这样做。如果您出于性能原因选择避免清除(例如Luke的方法),则可能会有一些罕见的--cleanup-the-mess程序选项会强制执行(并努力使valgrind保持快乐)...

但是,如果您编写的内容在概念上与高视角行为类似,则类似于()(Linux程序:) cronbashguile,{{1 }},makexslttidyindent等,因此您将要运行的Shell程序或任何类型的交互式解释器(在大多数情况下)仅几分钟,您就可以合理地决定采用卢克的方法。另一方面,如果编写的程序运行时间较长(例如,某些专用服务器),则肯定要避免每次内存泄漏(并且需要使用convert)。

答案 2 :(得分:1)

通常它不是必需的,并且让操作系统来处理它更快。从GNU coreutils source的简要介绍中,许多程序在遇到错误时会简单地调用die(),并立即退出进程。

答案 3 :(得分:0)

在某些系统中,共有一个c运行时,这意味着c程序共享某些资源,因此一个程序中的资源泄漏会影响其他应用程序。因此,至关重要的是所有应用程序都释放不使用的内容。 What is the C runtime library?

在CRT上有很好的讨论