清理出口或不清洁

问题描述:

我知道清理是一件好事。我也理解操作系统的内部,所以如果我知道我的进程正在终止,那么它的内存将被释放。但我喜欢提出不同的观点。我认为在退出时释放内存相当糟糕。清理出口或不清洁

例如,我可能已经分配了大量的内存,如果我在退出时释放它,它需要被带到RAM中,然后释放它。如果我不,在退出时,它只会在一张桌子上标出。我知道这个问题可以被认为是A_VERY_PLATFORM_DEPENDENT,但是从今天的应用程序开发人员的角度来看,他要么被阻塞(?)到某个框架中,要么被阻塞冒着严重依赖原始技术的冒险编码器,我会打电话给VERY_CONTROLLED_ENVIRONMENT。

对于TL;DR:在现代操作系统上,我认为我不应该在退出时执行清理。如果你认为我错了,为什么? PS:我不是在谈论RTOS,我的意思是控制环境意味着Windows,Linux和我从来不意味着设备驱动程序的开发或者操作系统开发。

+0

我怀疑在应用程序free和so free之间是否有区别(关于需要将SWAP中的页面带入RAM) – bolov 2014-12-07 19:55:43

+0

这是几个星期前讨论过的。我会找到并标记这个重复。 – 2014-12-07 19:55:48

+2

非内存资源如文件句柄,内核句柄等呢?如果你不清理基于内存的资源,你怎么能确定他们没有拿着“外部”手柄? – 2014-12-07 19:56:12

仅当您访问已换出的内存块时才会进入内存块。释放块是一个“簿记”事件,它不需要访问内存。通过跳过释放内存的呼叫,您不会获得任何收益。

在退出时始终手动释放资源的原因要强得多:它可以让您使用工具进行内存分析,因为您可以区分意外泄漏和故意泄漏。仅此原因足以推荐避免内存清理。

+1

我想+2 – bolov 2014-12-07 20:09:02

+0

'这个理由就足以推荐反对跳过内存清理'。那么,不。这是一个优点。这不是一个压倒一切的问题。 – 2014-12-08 03:19:11

+0

@MartinJames我只是说这个理由本身就够好。可能还有其他一些很好的理由(例如,当你的代码在生产中运行关键操作时能够在晚上睡得好),每个人都有足够的自身权利。就我个人而言,我发现将C++代码发布到生产环境而不运行内存分析器并修复它报告的所有警告是非常危险的。 – dasblinkenlight 2014-12-08 03:32:05