c++ - 内存泄漏能走多远?

标签 c++ c memory memory-leaks

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

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

请注意短语的双曲用法,“就像没有明天”和“悬空......就像脏衣服一样”。不安全* malloc*ing 会伤害您所爱的人。此外,请谨慎使用脏衣服。

最佳答案

没有。操作系统在进程退出时释放进程持有的所有资源。

这适用于操作系统维护的所有资源:内存、打开的文件、网络连接、窗口句柄...

也就是说,如果程序在没有操作系统的嵌入式系统上运行,或者在非常简单或有问题的操作系统上运行,则内存可能在重新启动之前无法使用。但如果你处于那种情况下,你可能不会问这个问题。

操作系统可能需要很长时间才能释放某些资源。例如,网络服务器用来接受连接的 TCP 端口可能需要几分钟才能空闲,即使被程序正确关闭。网络程序也可能拥有远程资源,例如数据库对象。当网络连接丢失时,远程系统应该释放这些资源,但它可能需要比本地操作系统更长的时间。

关于c++ - 内存泄漏能走多远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467298/

相关文章:

c - 如何将多个if语句合并为一个

C - 使用指针将一个字符数组的内容复制到另一个

C - 找到一个单词并获取接下来的两个单词

c++ - 哪个更快 : Assigning same value to a variable, 或找出它是否已经设置?

c# - 在 C# 应用程序退出时清理非托管 C++ 线程

c++ - 来自字符串文字 C++ 的字符串引用

c++ - #pragma once vs. include 守卫

c++ - 如何解决 Opengl 中多个纹理的这个问题

c - 如何在 C 中跟踪动态分配的内存

c++ - 内存去了哪里?