一位系统管理员告诉med,内存泄漏可以是不可见的。也就是说,如果应用程序正在泄漏内存,则应用程序使用的所有内存都可能在任务管理器或等效工具中不可见。
他似乎对此很有把握。我一直认为,在任务管理器(或进程资源管理器)之类的工具中,所有内存泄漏都是正确显示的(不是字节,而是内存不断增加,直到服务器中没有更多内存)?
他的说法正确吗?如果是这样的话:哪种类型的程序可以以这种方式泄漏内存?
编辑:
我不是说看到一个特定的泄漏,而是说这个过程正在消耗越来越多的内存。据他说,这个过程不会因为某些内存泄漏而消耗更多的内存。
发布于 2010-11-19 10:33:15
内存泄漏是一种情况,当一个内存块被标记为占用在程序内存中,并且在程序中没有指针变量存储地址,如果该块。任务管理器和类似的实用程序显示占用的内存总量(加上开销,加上碎片),而且他们不知道指针--他们无法检查程序内存。
这就是为什么泄漏内存和占用程序存储指针的内存对于这样的实用程序来说是无法区分的。因此,“悄悄地”泄漏内存--以一种隐蔽的方式--以至于程序的内存消耗不会增加--是不可能的。
发布于 2010-11-19 11:42:34
根据编译构造,可能在第一次访问内存之前不会实际分配内存。例如,这个脚本:
while(malloc(50));可以说是导致内存泄漏,因为它一直在分配内存,直到所有内存都被占用为止。但是,如果内存在使用之前没有实际分配,那么这将是一个“不可见的泄漏”--尽管我承认它扩展了泄漏的定义;)。
发布于 2010-11-19 09:24:51
首先,这取决于您如何定义内存泄漏。通常,我认为内存已经分配但没有指针/引用的情况都是内存泄漏,而不仅仅是应用程序连续分配内存而不释放内存的情况。(如果涉及GC,您可能还需要一个不同的定义)
使用此定义,不可能通过任务管理器看到所有内存泄漏,因为进程可能不会在程序发布后将所有内存返回给OS,因此您不必看到内存使用中的任何积极或负面的变化。
也就是说,任何不断吞食内存的过程看起来都是可疑的。
https://stackoverflow.com/questions/4223530
复制相似问题