1. 程式人生 > >用雜湊表加連結串列實現動態malloc

用雜湊表加連結串列實現動態malloc

///////////////////////////////////////////////////////////////////
////在指定的Free雜湊表項中查詢滿足size大小的記憶體並返回相應的地址
void *find_malloc(Node *head, size_t size) {
 size_t fsize = 0;
 while (head) {
  fsize = head->_size;   //獲取當前可用記憶體fsize
  if (fsize >= size) {   //如果當前可用記憶體fsize滿足使用者需求size
   head->_state = '1';  //標識當前記憶體為佔用
   pushUsed(&head);  //將當前佔用的記憶體插入到Used雜湊表中
   delFree(&head);   //獎當前佔用的記憶體從Free雜湊表中刪除
   if (fsize - size > NODESIZE) { //如果當前可用記憶體fsize超過使用者需求size並且剩餘記憶體能夠組織新記憶體塊
    head->_size = size; //設定前面佔用記憶體大小為使用者需求size
    Node *pNode = (Node *)((char *)head + NODESIZE + size); //建立新記憶體塊
    insertMain(&head, &pNode, fsize - size - NODESIZE);  //將新記憶體塊插入到主連結串列中
    insertFree(&pNode); //將新空閒記憶體插入到Free雜湊表中
   }
   return (void *)((char *)head + NODESIZE); //返回記憶體實際可用地址
  }
  head = head->_free;
 }
 return NULL;
}