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

C 控制台程序应该在关闭时释放其资源吗?,c,operating-system,C,Operating System,我正在创建一个控制台程序,它将有一些资源,比如一些线程和一些套接字 当用户关闭控制台程序时,我应该检测到这个关闭事件并释放这些资源,还是让操作系统来处理 众所周知的控制台程序(例如:ls,cat,grep,Linux中)退出时是否释放了资源 我的问题不是关于一个操作系统(我的控制台程序将在Windows、Linux和macOS上运行) 当用户关闭控制台程序时,我应该检测到这个关闭事件并释放这些资源,还是让操作系统来处理 好的代码被重复使用。今天是“关闭控制台程序”,明天可能是“从名为Christ

我正在创建一个控制台程序,它将有一些资源,比如一些线程和一些套接字

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

众所周知的控制台程序(例如:
ls
cat
grep
,Linux中)退出时是否释放了资源

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

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

好的代码被重复使用。今天是“关闭控制台程序”,明天可能是“从名为
Christopher\u console program()
的函数返回”

计划重新使用和关闭/释放分配的资源

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

好的代码被重复使用。今天是“关闭控制台程序”,明天可能是“从名为
Christopher\u console program()
的函数返回”


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

通常不需要,让操作系统来处理会更快。简单看一下,许多程序在遇到错误时会直接调用die(),这将立即退出进程。

通常不需要,让操作系统处理它会更快。简单看一下,许多程序在遇到错误时会直接调用die(),这将立即退出进程。

其他两个答案(so和)都有意义。这是一个观点问题

但是清理混乱会使调试更容易

如果您的程序严重到需要大量调试,那么您可能需要进行简化。但是,如果出于性能原因(例如Luke的方法)选择避免清理,您可能会有一些罕见的
——清理混乱
程序选项(并努力让
valgrind
高兴)

但是,如果您编写的内容在概念上类似于(Linux程序,如:)
cron
bash
guile
make
xslt
tidy
indent
convert
,那么您就可以运行shell程序或任何类型的交互式解释器(在大多数情况下)只要几分钟,你就可以合理地决定采用Luke的方法。另一方面,如果你编写一个运行时间很长的程序(例如某个专用服务器),你肯定希望避免每次内存泄漏(并且你需要使用
valgrind
)。

其他两个答案(so和)有道理。这是一个观点问题

但是清理混乱会使调试更容易

如果您的程序严重到需要大量调试,您可能希望促进这一点。如果您出于性能原因(例如Luke的方法)选择避免清理,那么您可能会有一些罕见的
——清理混乱的
程序选项(并努力使
valgrind
高兴)


但是,如果您编写的内容在概念上类似于(Linux程序,如:)
cron
bash
guile
make
xslt
tidy
indent
convert
,那么您就可以运行shell程序或任何类型的交互式解释器(在大多数情况下)只要几分钟,您就可以合理地决定采用Luke的方法。另一方面,如果您编写的程序运行时间很长(例如某个专用服务器),您肯定希望避免每次内存泄漏(并且您需要使用
valgrind
).

在某些系统中,有一个通用的c运行时,这意味着c程序共享某些资源,因此一个程序中的资源泄漏可能会影响其他应用程序。因此,所有应用程序都必须释放未使用的资源。
这里对CRT有一个很好的讨论

在一些系统中,有一个通用的c运行时,这意味着c程序共享某些资源,因此一个程序中的资源泄漏可能会影响其他应用程序。因此,所有应用程序都必须释放未使用的资源。
这里有一个关于CRT的很好的讨论

你有一个应该的标准吗?对效率、可移植性、可靠性或可重用性的偏见可能会产生不同的答案。一个主要的观察结果是fclose(stdout)几乎是闻所未闻的。你说“用户关闭程序”是什么意思?这是程序的自然结束,还是用户键入CTRL+C或kill命令来关闭程序?对于这些情况,答案可能会有所不同。好的代码总是在自己完成后进行清理。好的代码总是在收到指示后立即关闭。您是否有关于“应该”的标准?对效率、可移植性、可靠性的偏见可重用性或可重用性可能会产生不同的答案。一个主要的观察结果是fclose(stdout)几乎是闻所未闻的。你说“用户关闭程序”是什么意思?这是程序的自然结束,还是用户键入CTRL+C或kill命令来关闭程序?对于这些情况,答案可能会有所不同。好的代码总是在自己完成后进行清理。好的代码总是在收到指示时立即关闭。不需要并不意味着你无论如何都不应该这样做。好的编码习惯总是使用C自力更生。这取决于程序的类型。任何长时间运行的过程当然都应该小心地管理它的资源,但对于一次性实用程序来说,它所做的只是使你的程序变大,而没有真正的好处。除了一次性代码几乎总是被你或其他人再次使用。而且草率的程序