從幻燈片(在評論的鏈接)的圖像,我覺得你預計存儲鏈接作爲整數偏移。
在C中,這真的是最好的結構描述。
struct alloc_cell {
int size;
int forward;
int back;
int data[];
};
現在,他也有在最後重複的大小,這是很難用結構來描述。 目前尚不清楚它有多必要。它用於邊界合併。
編輯:很久以後,考慮評論。
即使您不能在代碼中使用結構,您仍然可以在僞代碼中使用它們來幫助組織您的思維。結構字段都是相同的類型,自然映射到一個數組,該數組可以通過指向第一個成員/元素的指針訪問。
struct alloc_cell { // int *cell;
int size; // cell[0] // *cell
int forward; // cell[1]
int back; // cell[2]
int data[]; // (cell+3)[...] // &cell[3]
};
你甚至可以走那麼遠,給這些偏移記憶的名字(但是這可能被視爲矯枉過正和不必要的混淆)。
enum { SIZE, FORWARD, BACK, DATA };
cell[SIZE]; // alloc_cell.size
cell[FORWARD]; // alloc_cell.forward
cell[BACK]; // alloc_cell.back
cell+DATA; // &cell[DATA] // alloc_cell.data
你是什麼意思「不能使用任何類型的數據結構,如:鏈表」,但不知何故,你*可以*有「下一個/先行指針」?有些東西沒有意義。 – 2014-10-18 10:24:28
@luserdroog所以我們不允許使用任何類型的數據結構。但明確的空閒列表跟蹤下一個/ prev空閒塊。換句話說,顯式自由列表是一種算法,我必須實現它。[顯式免費列表](http://www.eecs.harvard.edu/~mdw/course/cs61/mediawiki/images/b/b9 /Lectures-malloc2.pdf) – aaa 2014-10-18 10:36:13
好的。所以你不能「使用(預先寫好的)鏈表」,因爲*這是一個鏈表。對? – 2014-10-18 10:58:37