2009-10-17 33 views
0

這是一個來自編譯器設計課程的作業問題。我只需要解釋一下問題的某些部分。計數內存塊

它被要求返回塊標準的內存管理器 需要多少管理。爲什麼 是否不足以使每個塊具有單個 計數器,該計數器包含該塊的 繁忙記錄數 ,並在 達到0時返回塊?

它引用的上下文談到鏈接列表。

從答卷國回答:

你怎麼找到這個計數器開始 從指針記錄,以及如何 你得到的指針,通過該 返回塊?

來自基於C的背景。有人可以向我解釋什麼:

  1. 塊是?
  2. 櫃檯呢?
  3. 繁忙的記錄是?

對計數階段發生的事件進行演練的文檔參考。圖表會有幫助。

謝謝。

+0

問題中沒有足夠的上下文來回答這個問題......對於你的問題的回答將會出現在你的教科書中沒有引用的部分(或者在其前面的章節中)。 – bdonlan 2009-10-17 23:20:58

+0

對不起,我更新了,它在鏈表的上下文中。 – 2009-10-17 23:29:35

+0

你應該問誰給這項任務的人這些條款是什麼意思。像你一樣,我們只能猜測。 但是,仔細閱讀摘錄,我們可以推斷出:不計算內存塊,但計算它們的使用量,這是爲了確定內存塊何時未使用並因此可以回收。 – meriton 2009-10-18 00:11:08

回答

1

我認爲這可能會有所幫助,如果我改變一些條款,以更好地解釋我正在猜測的事情。

如果您有一頁內存,我們可以說一個頁面大小爲8k。這是內存管理器分配的最小大小。

您有10個請求,每個請求100個字節,因此1000個字節位於頁面上的各個位置。

該計數器爲10,但是,您如何知道實際釋放的內容或已經分配的內容,因爲這10個請求可能不是連續的,因爲可能有其他請求已經被釋放。

因此,我們有10個繁忙的記錄。

現在,您需要在回答表中提出自己的問題答案,但希望通過查看一個示例可能會更簡單。

0

「塊」最有可能是basic block

我對「繁忙記錄」一詞並不熟悉;很可能它指的是某些變量的數據流分析結果(即變量可能被視爲「繁忙」)。一些定義似乎是可信:

  1. 一個變量可以被認爲是「忙」,如果它包含一個值(即已經被「寫」),這也將是「讀」(意思是,你不能輕易消除變量)
  2. 如果「經常」(比其他變量更頻繁)使用某個變量,則該變量可能被視爲「繁忙」,這意味着您應該嘗試將其分配給寄存器。

但是,您應該真正瞭解該術語是如何在您的課程中定義的。

然後,計數器將計算每個基本塊的繁忙變量數量。爲什麼計數器在經過一些處理並不清楚之後可能變爲0 - 最有可能的是,「繁忙」在你的課程中具有另一個意義。

+0

我讀了3遍。我對「繁忙記錄」一無所知。搜索「忙碌」,找到了問題。儘管它涉及到鏈表,但我仍然不知道如何將「繁忙記錄」與該類型的數據結構相關聯。 – 2009-10-17 23:46:51

0
  1. 塊是?經理已經把存儲空間分成了塊。一個或多個塊由可供用戶連續訪問的存儲區單元組成。如果需要更多內存,管理器會將額外的塊添加到該內存區域。而經理總是試圖給用戶連續的阻止。

  2. 櫃檯呢?對於特定的塊,它可能會被不同的用戶使用,也就是說,內存區域被多個用戶共享。

  3. 繁忙的記錄是?計數器值存儲在上面的「計數器」中。

例如:

struct block { 
    struct block *next; 
    long counter; //@< the busy record 
}; 

EDIT: changing "area" to "user" 
struct user { 
    struct block *head; 
    ... 
}; 

編輯:回答這個問題:「爲什麼是櫃檯不夠的塊」 將塊從「空閒塊列表」移動到「分配塊列表」或反之亦然時,需要更多信息。用於快速定位列表中的位置。而我只是猜測這一點。