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自力更生。这取决于程序的类型。任何长时间运行的过程当然都应该小心地管理它的资源,但对于一次性实用程序来说,它所做的只是使你的程序变大,而没有真正的好处。除了一次性代码几乎总是被你或其他人再次使用。而且草率的程序