2009-09-30 46 views
0

經過四處搜索並查閱恐龍書後,我來到SO尋求智慧。請注意,這與家庭作業有關,但實際上不是家庭作業問題。此外,這是使用C編程語言。給出內存硬限制的內存管理位矢量的大小

我正在使用目前以4K塊分配內存的內核。爲了減少浪費的內存,我重寫了我認爲malloc是什麼樣子的地方,它會抓取4K頁面,然後根據需要從內存中釋放內存。那部分目前工作正常。我打算有一個內存頁鏈表。內存是作爲char *處理的,所以我的結構中有一個char *。它目前也有一些描述它的整數,以及指向下一個節點的指針。

問題是這樣的:我打算使用一個位向量來跟蹤空閒和使用的內存。我想知道需要多少個整數(4個字節,32位)來跟蹤內存頁面中的所有1字節塊。因此位向量中的1位將對應頁面中的1個字節。值得注意的是,我必須在已分配的4K內部適應這一切,所以我需要計算滿足4K中1位每字節約束條件所需的整數數量。或者更確切地說,我需要最大化「實際」內存,同時儘量減少映射每個字節一個位所需的整數數量,而這兩個部分(「實際」內存和位向量)都在同一頁。

由於關於頁面和指針的信息,我實際上沒有4K可以玩,但是更接近4062字節。

我認爲這是一個線性規劃問題,但是我嘗試過的方法還沒有解決。

回答

1

你想使用位圖來跟蹤4k頁面中分配的字節嗎?並想知道如何確定位圖應該有多大(以字節爲單位)?答案是456(四捨五入後),通過解這個方程發現:

X + X/8 = 4096 

其簡化爲:

9X = 32768 

但是......保持每個分配的頁面內的位圖的整個方法聽起來很對我錯了。如果你想分配一個12k緩衝區怎麼辦?

+0

Doh!我早些時候在Y + X/8 = 4096的時候瞎搞。愚蠢的錯誤,有Y,而不是X. 這是非常錯誤的,但它會足夠我的目的。我不認爲我會永遠不想分配12k,這或多或少是我只會繼續努力的。我已經可以在4k塊中分配內存,所以如果我需要更多,我可以創建一個鏈表。 謝謝。 – 2009-09-30 01:06:59

+0

如果考慮到OP提到的將可用空間降低到4062字節的開銷,它只需要452個字節的位圖。 – caf 2009-09-30 01:07:29