我曾多次遇到内存泄漏问题。通常当我是malloc
-ing的时候,就像没有明天,或者像脏衣服一样挂着FILE *
s。我通常认为(阅读:绝望的希望),所有内存都被清理,至少当程序终止时。是否存在在程序终止或崩溃时无法收集泄漏的内存的情况?
如果答案因语言而异,那么让我们关注一下C(++)。
请注意短语的夸张用法,“就像没有明天”和“像脏衣服一样晃来晃去”。不安全的malloc
*会伤害你所爱的人。另外,请小心处理脏衣服。
发布于 2013-03-18 07:01:18
C标准没有指定在程序终止时释放由malloc
分配的内存。这是由操作系统完成的,并不是所有的OSes (通常在嵌入式环境中)都会在程序终止时释放内存。
发布于 2013-03-18 08:53:10
正如其他人所说,大多数操作系统将在进程终止时回收分配的内存(可能还有其他资源,如网络套接字、文件句柄等)。
话虽如此,在处理new/delete (而不是原始的malloc/free)时,内存可能不是唯一需要担心的问题。在new中分配的内存可能会被回收,但在对象的析构函数中可能完成的事情将不会发生。也许某些类的析构函数在销毁时会将一个标记值写入文件中。如果进程刚刚终止,文件句柄可能会被刷新,内存可能会被回收,但该标记值不会被写入。
这个故事的寓意是,总是自己清理干净。不要让事情摇摆不定。不要依赖操作系统在你之后进行清理。自己清理一下吧。
发布于 2013-03-18 07:02:10
这更可能取决于操作系统而不是语言。最终,任何语言的任何程序都将从操作系统获取内存。
我从来没有听说过一个操作系统在程序退出/崩溃时不回收内存。因此,如果你的程序对它需要分配的内存有一个上限,那么只分配而不释放是完全合理的。
https://stackoverflow.com/questions/15467298
复制相似问题