我正在编写一个c终端程序,该程序一直运行,直到用户使用 Ctrl + C 终止它。想一想像ping
或top
。
我的程序分配给堆但不启动其他线程或进程。我应该在退出之前处理SIGINT并释放任何已分配的内存,还是将其留给操作系统进行更好的练习?
答案 0 :(得分:1)
根据您的背景,这是一个正常的退出情况,简短的回答是肯定的。在异常退出的情况下,简短的回答绝对没有。
如果您担心程序在执行过程中泄漏内存,这会减慢程序执行速度,那么您可以跟踪分配的内存,然后在退出之前将其释放。然后你可以用valgrind运行你的程序,如果valgrind抱怨没有自由的块,那么你就会知道你有某种类型的泄漏。分配的位置将帮助您了解泄漏是否具有任何重要性。
答案 1 :(得分:0)
如果您仍然退出,则无需释放任何资源。操作系统会很好地处理它,手动操作没有任何好处。
请注意,free()不是async-safe,所以你肯定必须在主线程中实际释放,而不是在处理程序中。但是不要这样做,除非你想做除了exit()之外的其他事情。
使用SIGINT处理程序来重置终端(例如使用ncurses)或保存临界状态。