隐藏的内存泄漏

时间:2010-11-19 09:15:14

标签: memory-leaks

系统管理员告诉med,内存泄漏可能是不可见的。即,如果应用程序泄漏内存,应用程序使用的所有内存可能在任务管理器或等效工具中不可见。

他似乎很确定这一点。我总是在任务管理器(或进程资源管理器)等工具中正确显示所有内存泄漏(不是以字节为单位,但内存不断增加,直到服务器中没有更多内存)?

他的陈述是否正确,如果是这样的话:哪种类型的程序会以这种方式泄漏内存?

修改

我不是在谈论看到特定的泄漏,但是这个过程消耗的内存越来越多。根据他的说法,对于某些内存泄漏,该进程不会消耗更多内存。

3 个答案:

答案 0 :(得分:4)

内存泄漏是指程序存储器中存在一块内存被标记为已占用且存储该地址的程序中没有指针变量的情况。任务管理器和类似的实用程序显示占用内存的总量(加上开销,加上碎片),他们不知道指针 - 他们无法检查程序内存。

这就是为什么泄漏的内存和刚刚占用的内存程序存储指针对于这样的实用程序是难以区分的。因此,以一种隐蔽的方式“无声地”泄露内存,使得程序的内存消耗不会增加 - 是不可能的。

答案 1 :(得分:0)

首先,它取决于您如何定义内存泄漏。我通常会考虑任何已分配内存但没有指针/引用仍然存在内存泄漏的情况,而不仅仅是应用程序在不释放内存的情况下不断分配内存的情况。 (如果涉及GC,你可能想要一个不同的定义)

使用此定义no不可能通过任务管理器查看所有内存泄漏,因为在程序释放后,进程可能无法将所有内存返回给操作系统,因此您不会看到每个正面或内存使用的负面变化。

那说任何持续吞噬内存的进程确实看起来很可疑

答案 2 :(得分:0)

根据编译结构,可能有可能在首次访问内存之前实际上没有分配内存。例如,这个脚本:

while(malloc(50));

可以说是导致内存泄漏 - 因为它只是一直在分配内存,直到它全部被占用。但是,如果在使用内存之前没有实际分配内存,那么这将是一个“隐形泄漏” - 尽管我承认它正在扩展泄漏的定义;)。

相关问题