標籤

2013年9月4日 星期三

link list-小專題-記憶體管理-增加occupy list

// 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就大功告成了。

沒有留言:

張貼留言