我是学生,我必须对内存泄漏检测进行研究。在许多论文中,他们谈论的是分配环境。我不知道这意味着什么。我无法找到分配上下文的任何定义(或翻译,我来自德国)。
例如,一篇论文的引用(通过内省动态检测内存泄漏) 使用机器学习的行为建模):
使用机器学习的关键思想是通过观察其他类似对象的生命周期来识别泄漏对象。也就是说,当一个对象产生从其他所谓的相似对象(即具有相同分配上下文)的对象未观察到的高度陈旧时,可以认为该对象已泄露。
或者:
为了解决这个问题,这项工作从之前关于物体寿命预测的研究中获得灵感[4,20]。根据这些工作,对象的生命周期与其分配上下文密切相关。由于对象的陈旧性受其生命周期的限制,因此对象陈旧性与分配上下文传递相关。
有人可以尽可能轻松地向我解释吗?
编辑:
摘要:
本文扩展了基于陈旧性的内存泄漏检测 通过提出基于机器学习的框架。该 提议的框架基于一个对象stal-的想法 关于ob-的相似性,可以更好地利用eness jects;即,如果物体显示,则物体更可能泄漏 从其他类似的观察中没有观察到明显高的陈旧性 具有相同分配上下文的对象。 拟议框架的核心部分是建模 堆对象。为此,框架观察到了 在代表性运行过程中对象的陈旧性 折叠。从观察到的数据中,框架生成 训练样例,其中也包含假设的实例 - ical泄漏。通过机器学习,提出了框架 替换容易出错的用户可拒绝的陈旧性谓词 在先前的研究中使用基于模型的预测。 该框架使用合成和实际测试 世界的例子。合成泄漏工作评估 - 大量的SPEC2006基准测试表明了这一建议 方法达到了陈旧性所允许的最佳准确度 - 基于泄漏检测。而且,通过合并 分配上下文进入模型,提出的方法实现 比单独的物体陈旧性更高的准确度。 对现实世界内存泄漏的评估表明了这一点 所提出的方法对于检测先前的方法是有效的 以高精度移植错误。
答案 0 :(得分:7)
我收到了其中一位作者的回复。定义如下:
分配环境
它指的是分配时的调用堆栈内容。 例如,如果一个分配站点包含在函数foo和 函数从main(在执行期间)调用,分配上下文 对于分配站点是(main,main:call @ foo,foo:malloc(...))。
答案 1 :(得分:5)
考虑这样的C example:
#include <stdlib.h>
void function_which_allocates(void) {
/* allocate an array of 45 floats */
float *a = malloc(sizeof(float) * 45);
/* additional code making use of 'a' */
/* return to main, having forgotten to free the memory we malloc'd */
}
int main(void) {
function_which_allocates();
/* the pointer 'a' no longer exists, and therefore cannot be freed,
but the memory is still allocated. a leak has occurred. */
}
a
的分配上下文是function_which_allocates
。
因此,变量的分配上下文是该变量的scope。
如果超出范围,则无法释放内存,从而导致内存泄漏。
答案 2 :(得分:0)
我认为这仅仅意味着&#34;它被分配的背景&#34; 换句话说,您可以将其视为&#34;程序的可观察状态,当分配发生时#34; - 即调用堆栈,局部变量等