首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >内存泄漏能走多远?

内存泄漏能走多远?
EN

Stack Overflow用户
提问于 2013-03-18 06:58:25
回答 6查看 9.1K关注 0票数 121

我曾多次遇到内存泄漏问题。通常当我是malloc-ing的时候,就像没有明天,或者像脏衣服一样挂着FILE *s。我通常认为(阅读:绝望的希望),所有内存都被清理,至少当程序终止时。是否存在在程序终止或崩溃时无法收集泄漏的内存的情况?

如果答案因语言而异,那么让我们关注一下C(++)。

请注意短语的夸张用法,“就像没有明天”和“像脏衣服一样晃来晃去”。不安全的malloc*会伤害你所爱的人。另外,请小心处理脏衣服。

EN

回答 6

Stack Overflow用户

发布于 2013-03-18 07:01:18

C标准没有指定在程序终止时释放由malloc分配的内存。这是由操作系统完成的,并不是所有的OSes (通常在嵌入式环境中)都会在程序终止时释放内存。

票数 48
EN

Stack Overflow用户

发布于 2013-03-18 08:53:10

正如其他人所说,大多数操作系统将在进程终止时回收分配的内存(可能还有其他资源,如网络套接字、文件句柄等)。

话虽如此,在处理new/delete (而不是原始的malloc/free)时,内存可能不是唯一需要担心的问题。在new中分配的内存可能会被回收,但在对象的析构函数中可能完成的事情将不会发生。也许某些类的析构函数在销毁时会将一个标记值写入文件中。如果进程刚刚终止,文件句柄可能会被刷新,内存可能会被回收,但该标记值不会被写入。

这个故事的寓意是,总是自己清理干净。不要让事情摇摆不定。不要依赖操作系统在你之后进行清理。自己清理一下吧。

票数 8
EN

Stack Overflow用户

发布于 2013-03-18 07:02:10

这更可能取决于操作系统而不是语言。最终,任何语言的任何程序都将从操作系统获取内存。

我从来没有听说过一个操作系统在程序退出/崩溃时不回收内存。因此,如果你的程序对它需要分配的内存有一个上限,那么只分配而不释放是完全合理的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15467298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档