user:surendra nath
对此post的回答表明OP发布的代码存在内存泄漏,而大多数情况下,我发现当我们失败时会发生泄漏释放动态分配的内存区域但我在OP代码中看不到任何动态分配。
他引用了这个维基定义here。
从user:artificial idiot
到post的内存泄漏的另一个定义是:
微妙的定义:无法释放可到达的内存,但没有 程序正常运行所需的时间更长。这差不多了 用自动化工具或程序员无法检测到 不熟悉代码。虽然从技术上说它不是泄漏,但它有 与天真的相同。这不仅仅是我自己的想法。 您可以遇到使用垃圾收集的项目 语言,但仍然提到修改内存泄漏的更改日志。
所以,我的问题:
P.S。 - 我不知道wiki和amp;的定义是否合适。 "人工白痴"具有相同的含义,因为维基定义有时太宽泛而无法理解。
答案 0 :(得分:2)
The Best Memory Leak Definition中人为白痴提出的问题有时可能是一个问题。假设你有一个类似这样的程序:
在步骤3-5期间,第一个阵列仍在使用内存,即使它不需要任何数据。因此,整个程序使用的内存总量是实际需要的两倍。如果它不再需要它,它应该在第2步之后释放第一个数组 - 然后它的内存可以重用于第二个数组。
这是即使在垃圾收集语言中也可能发生的内存泄漏 - 如果保存对第一个数组的引用的变量没有被重新分配或超出范围,它将使所有数据保持不变GC'ed。
理论上,一个足够聪明的优化器可以自动解决这个问题。如果它可以分析控制和数据流,并确定在步骤2之后从未使用过第一个数组,它可以将步骤6重新排序到该位置。但在许多情况下,编译器可能很难确定这一点。
编写模块化代码通常可以避免这样的问题。如果为处理每个数组创建单独的函数,函数应该分配它们,使用它们并释放它们。