2017-03-08 61 views
0

我读wikipedia文章称C++什么时候终止程序的内存泄漏很重要?

内存泄漏可能不严重的甚至会通过正常手段检测。在现代操作系统的 中,当应用程序终止时,应用程序使用的正常内存为 。这意味着内存 泄漏只能运行很短时间的程序可能不会被注意到 并且很少严重。

操作系统在终止时自动释放正常的内存。因此,如果内存泄漏不严重,程序泄漏的内存在终止后可能不是问题。

但它只提到“正常记忆”的情况下,我很担心。 任何人都可以解释什么非正常的记忆意味着什么?

+1

在引用的部分之后的第3个项目符号中,它提到了共享内存,它不会在终止时自动释放。 –

+0

@DanMašek什么是共享内存?这是否意味着通过流程共享内存? – Kevin

+0

是的,用作IPC机制。 –

回答

1

少有几个哲学原因?对于初学者来说,如果你以后需要在程序中重新设计生命周期的概念,比如切换到服务,dll,multidoc支持或类似的东西,那么解决这个问题将成为必须和额外成本。其次,如果程序没有释放内存,它可能不会释放其他关键资源,例如服务器上的文件锁(当然,我不知道你的程序是干什么的)。

但是,在专用硬件上的实时系统之外,可以保证进程终止时的内存释放。这些可以表现得非常不同。

0

一般而言;泄漏内存的程序在程序运行时只是一个问题。它会占用更多的内存,甚至可能会用完。但是,只要程序终止,操作系统内核就会回收程序曾经分配的所有内存,因此它将全部空闲并可用于其他用途。

在某些情况下,故意在关机时泄漏内存实际上是一种相当常见的技巧。如果知道你的对象析构函数不做任何后果,如果程序正在关闭,那么它可以更快地泄漏对象,让操作系统清理,当你终止,而不是比运行所有的析构函数。然而;只有这样做,如果你有充分的理由和真的知道你在做什么,为什么你这样做。

+0

是的,速度是我从一开始就关注的一个问题。另一个是关于一个分离的线程。我有好几次不得不拆掉我的线程。终止后,我很少担心分离线程中的资源。听到这是常见的伎俩,这非常安慰。 – Kevin