我正在做一个 C 项目。当程序正常运行时,它会在程序结束时进行清理。它清理 curl 和 mysql,以及 free()s char 数组等。
当我开发新例程时,我正在分配应在程序结束时清理的资源。但是为了看看新例程发生了什么,我正在打印各种东西然后调用: 退出(0);
我的问题是,当我使用这些粗鲁的退出命令编译代码时,linux 环境是否足够智能以释放本应在程序结束时释放的资源?或者我是否正在开发系统内存泄漏?
最佳答案
是的,内存将被释放,但它不会被进程放弃,而是会在进程退出后的某个时间点被操作系统回收。
在极端情况下,这可能会使 RAM 不与进程相关联,但会临时使用,导致操作系统累积停滞。这实际上只是“非常”遗留操作系统(认为已有 20 多年历史)中的一个主要问题。
在许多情况下,文件句柄的供应比 RAM 少,您在等待新文件句柄时可能会遇到问题。但同样,大多数现代操作系统最终都会回收打开的文件句柄。
现在,有些项目(IPC 结构,如 semaphores、shared memory 等)可能不会在粗鲁的导出中被清除,但如果您在以下位置使用它们,您通常会知道这些事情全部。
关于c - 调试时使用 exit() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898201/