如果我使用malloc
在我的C程序中分配了内存,现在我想退出,我是否必须释放已分配的内存,或者我可以假设,因为我的整个程序终止,它将被释放OS?
我在Linux环境中运行。
答案 0 :(得分:20)
任何现代操作系统都会在进程终止后清理所有内容,但依靠此操作通常不是一个好习惯。
这取决于您正在编写的程序。如果它只是一个快速运行和终止的命令行工具,您可能不会打扰清理。但请注意,正是这种心态导致守护进程和长时间运行程序中的内存泄漏。
答案 1 :(得分:8)
简单地退出并允许操作系统清理所有内容,这可能是一个很好的设计并且非常有效。 Apple OS X now does this by default:应用程序在没有通知的情况下被杀死,除非应用程序设置了“不要杀我”标志。
通常,释放每个内存分配都需要很长时间。某些内存页可能已被换出,必须重新读回,以便将它们标记为空闲。内存分配器必须做很多工作来更新可用内存跟踪数据。所有这些努力都是浪费,因为该计划正在退出。
但这必须通过设计来完成,而不是因为程序员已经忘记了已分配的内存!
答案 2 :(得分:3)
在任何情况下,在进程终止时,操作系统都会释放它。所以你不需要它,但因为这是一个很好的做法,你为什么不这样做呢? :)
实际上,对于复杂的代码,我不会冒险不发布我不确定100%的东西,因为程序会在之后退出。因此,对于任何最小的疑问,只需释放它。
答案 3 :(得分:2)
操作系统将回收内存,因此您无需释放内存。
大多数程序都会释放内存,因为如果你没有释放任何内存,那么你可能会因这些故意泄漏而出现问题。
答案 4 :(得分:2)
是的,你可以认为。
尽管在不需要内存后立即释放内存是一个好习惯,但即使对于仅运行一小段时间的软件也是如此。
答案 5 :(得分:1)
Linux将释放已分配的内存并在进程终止时关闭文件描述符。
答案 6 :(得分:1)
始终释放已分配的内存,因为操作系统将毫无理由地保留较少的内存。它在小型操作系统中非常引人注意,它占用的内存很小。
答案 7 :(得分:0)
操作系统将回收内存,但是如果您希望在使用其他内容之前它们会超出范围,那么放弃内容是一种很好的做法。但是,您可以或多或少地依赖程序的终止来为您处理内存管理。