2013-12-18 71 views
0

我們可以分配位數的動態內存嗎?我知道malloc()需要以字節爲單位的內存大小。我們可以寫一個內核模塊來分配內存嗎?這個模塊應該被用戶程序調用來分配內存。如果你們說是,我會開始研究它。是否有可能以位分配動態內存?

+3

'ptr = malloc((numBits + 7)/ 8);' – godel9

+5

你爲什麼要這麼做?最小的可尋址單元是字節。管理子字節尋址的開銷不僅會浪費您可能意識到的任何「收益」。 – 2013-12-18 06:59:49

回答

5

首先,由於無法解決問題,因此您無法分配一些位(現代系統中甚至不支持字節)。存儲器地址總是給出數據總線的寬度(例如64位)。

如果你想模仿按位分配@ godel9是正確的。我更喜歡

ptr = malloc((numbits % 8) + 1). 
+0

你的公式是錯誤的 - 它永遠不會分配超過8個字節 – mvp

+0

哎呀!你是對的! –

5

如果您需要分配足夠的內存來存儲numBits位,你可以除以8 numBits,圍捕,並調用malloc與字節數。您可能需要在年底一些額外的位,但不應該是一個問題:

void *allocBits(size_t numBits) { 
    return malloc((numBits + 7)/8); 
} 
0

我認爲沒有理由寫這個模塊,因爲沒有任何硬件的方式在分配單個位內存在大多數情況下分爲32位區域。即使在8位體系結構中,最小數量的內存也只有一個字節,並且沒有辦法以硬件方式尋址單個位(除了ARM的位帶等特殊情況)。