【发布时间】:2018-08-29 17:06:09
【问题描述】:
我正在编写一个 c 终端程序,该程序一直运行到用户使用 Ctrl+C 终止它。想想ping 或top。
我的程序分配给堆,但没有启动其他线程或进程。我应该在退出前处理 SIGINT 并释放任何分配的内存还是将其留给操作系统更好的做法?
【问题讨论】:
-
一旦您的程序退出,它分配的任何内存都会返回给操作系统,但最好自己释放分配的内存。
-
您需要所有分配的内存指针都是全局的,以便处理程序能够
free它们,这是糟糕的程序设计。在正常流程中,您需要谨慎地将任何freed 指针设置为NULL- 以及如果在程序的正常过程中发生在freeing 内存之间的信号阻塞问题,并将其指针设置为NULL。 -
我不一定要释放处理程序中的内存,例如,可以在处理程序中设置一个标志来停止主循环并在循环退出后释放内存。但是,是的,为了获得可疑的收益,这将是相当大的努力,因此是这个问题。