2015-05-30 73 views
9

我是一名學生,我不得不做一個關於內存泄漏檢測的研究。在很多論文中他們都在談論分配上下文。我不知道這意味着什麼。我找不到分配上下文(或翻譯,我來自德國)的任何定義。什麼是「分配上下文」?

作爲一個例子,從紙報價(檢測內存泄漏通過內省動態 行爲使用機器學習建模):

後面使用機器學習的關鍵思想是,泄漏目的是通過觀察可辨別其他類似物體的壽命。也就是說,當一個物體產生高度的陳舊程度時,可以認爲這個物體沒有被其他所謂的相似物體所觀察到,即具有相同分配環境的物體。

或者:

要解決這個問題,這項工作的靈感來自以前的研究對象壽命預測[4,20]。根據這些作品,對象的生命週期與其分配上下文密切相關。由於對象的陳舊度以其生命週期爲界限,因此對象過時與分配上下文傳遞相關。

有人能給我解釋一下嗎?

編輯:

抽象:

本文通過呈現基於機器學習的框架擴展基於過時-內存泄漏檢測 。所提出的框架基於以下想法:在對象的相似性方面可以更好地利用對象st;即如果對象具有相同的分配上下文,則顯示 沒有從其他類似的 對象觀察到的明顯高的陳舊性,對象更可能已經泄露。 建議框架的核心部分是堆對象的建模 。爲此,該框架在應用的代表性運行期間觀察對象的陳舊性。從觀察到的數據中,該框架生成了訓練樣例,其中還包含假設泄漏的實例。通過機器學習,所提出的框架 用以基於模型的預測代替先前研究中使用的容易出錯的用戶禁止陳舊性陳述 。 該框架使用合成和實際的 世界示例進行了測試。使用合成泄漏工作評估 SPEC2006基準的負載表明所提出的 方法實現了基於陳舊度- 的泄漏檢測所允許的最佳精度。此外,通過將 分配上下文整合到模型中,所提出的方法實現了比單獨的對象過時更高的準確度。用現實世界的內存泄漏進行評估表明,所提出的方法對於以高精度檢測先前移植的錯誤是有效的。

+2

我不知道任何特定的短語「分配上下文」的定義。例如,該短語不會出現在C標準的任何地方。我想你只需要從作者使用短語的情況*背景中推斷出它的含義。論文是否定義了這個術語? –

+0

那麼,我試圖從上下文中找出什麼分配上下文可能意味着..但沒有成功..作者沒有定義術語..:/我已經添加了摘要,其中該術語出現在第一個時間..也許它會幫助.. –

+0

它可能是內存泄漏檢測特定領域的既定術語。通過參考挖掘可能是有用的。 – molbdnilo

回答

7

我收到了一位作者的回覆。的定義如下:

分配上下文

它是指在調用堆棧內容物在分配的時間。例如,如果分配站點包含在函數foo中並且從main調用函數(在執行期間),則分配站點的分配上下文 是(main,main:call @ foo,foo:malloc(。 ..))。

+0

聽起來很像我寫的哈哈。 +1 – Mehrdad

0

我相信它只是意味着「分配的上下文」。
換句話說,你可以把它看成「的分配發生時的程序的觀測狀態」 - 即調用棧,局部變量等

+1

我同意「上下文」,特別是在談論計算機體系結構時,通常意味着程序狀態,寄存器內容,內存等。但我認爲這不是OP引用的案文中的案例。第一句說*「具有相同分配上下文的對象」*。根據你的上下文定義,這是不可能的。分配時刻的兩個(或更多)對象不能具有相同的上下文(程序狀態)。因爲當第一個被分配時,狀態改變了。 –

+0

@AdamStelmaszczyk:請注意,我說「** observable **狀態」是有原因的。內存分配通常被視爲純粹的(即無副作用)操作,因爲通常很難觀察其副作用,而且通常不想。 (唯一真正的方法是耗盡你的內存。)在分配之後唯一不同的可觀察狀態是指向已分配塊的額外變量,爲了「相同性」的目的,我們可以忽略此處,因爲那時它沒有被使用,並且與程序的其餘部分無關。 (另外,好的復仇downvoting。) – Mehrdad

5

考慮這樣Ç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

你的解釋沒有意義。分配上下文是分配的內存塊的屬性,而範圍是指向它的變量的屬性。這兩個是正交的。 – Mehrdad