// add node to occupy list void add_to_occupy_list(MemInfo *node) { // set this node to head of the occupy list node->prev = NULL; if (head_occupy != NULL) head_occupy->prev = node; node->next = head_occupy; head_occupy = node; }我們除了要記錄可用的list以外,也同時必須記錄已經使用的list才有意義。因此不管是從first fit又或是best fit return出來的node是已經使用中了,那麼就必須要把這個node加到head_occupy上。這邊的function就是在做這件事情。
而為了節省速度,使用了有點像是先進後出的概念去做這一條head_occupy的list,也就是head_occupy always是指向最新使用的node,當然要節省速度也不是只有這種方法,我們也可以使用tail_occupy去指向這個list的tail,而由於是雙向的list,因此可以使用prev指標便能輕易的移動。
我們用了先進後出,所以這個node將會是head_occupy,因此它的prev將會是NULL,於是便先指定:
node->prev = NULL;接著把目前的head_occupy往前接給現在的node,但同時必須先注意head_occupy是否是空指標,因為如果是空指標是沒有定義記憶體空間的,因此它的prev便沒有合法定義:
if (head_occupy != NULL) head_occupy->prev = node;然後把現在的node往後接head,邏輯同前面的敘述,但我們就直接接head_occupy便可,因為即使head_occupy是空指標,目前的node往後接空指標是我們要的狀況:
node->next = head_occupy;最後重新指定head_occupy就大功告成了。
沒有留言:
張貼留言