是内存泄漏永久的

Are memory leaks permanent?

本文关键字:泄漏 内存      更新时间:2023-10-16

当一个人在程序中使用malloc并且不会释放内存时,在程序运行和终止后,在计算机上丢失了程序吗?

它取决于操作系统(更确切地说,是您的特定C实现,它隐含包含您的OS(。您需要阅读更多有关OS的信息,例如操作系统:三个简单的作品教科书(可自由下载(。

在Linux,Unix(包括MacOSX,Android等(等现代OS上,Windows等...每个过程都有其自己的虚拟地址空间。当该过程终止时,其整个虚拟地址空间消失(包括任何"内存泄漏"(。

实际上,mallocfree是在管理虚拟地址空间的操作系统上方构建的(在Linux上,这些原始词是MMAP(2(& munmap等系统调用,也许是旧的SBRK(2((和分页。请注意,free通常不会将内存释放到OS(例如使用munmap(,但更常见将释放的内存区域标记为可通过未来malloc -S重复使用的。

但是,避免记忆泄漏是一项良好的学科(对于服务器等长寿命过程至关重要(。然后,诸如Valgrind或地址消毒器之类的工具可以帮助检测它们。

一本关于垃圾收集的好书可为您提供与内存管理有关的概念和术语。还请阅读有关Raii的信息。想想循环引用,智能指针,弱参考等。

(在MS-DOS等旧系统上,可能并非如此,但细节很重要;在某些嵌入式系统上(