mm_free()

void mm_free (void *ptr) {
  size_t payloadSize;
  BlockInfo * blockInfo;
  BlockInfo * followingBlock;
  size_t blockSize;

  blockInfo = (BlockInfo *)ptr; //这里有问题malloc得到的指针是header后面一个,你自己都return 了 POINTER_ADD(ptrFreeBlock,WORD_SIZE);,明显应该是 POINTER_ADD(ptrFreeBlock,WORD_SIZE);
  blockSize = SIZE(blockInfo->sizeAndTags);
   //Set Header
  blockInfo->sizeAndTags &= (~TAG_USED);
  //既然是freeblock,你应该设置完header,再补上footer,原来没有footer,是因为被malloc占用了
  insertFreeBlock(blockInfo);

  followingBlock = (BlockInfo *)POINTER_ADD(blockInfo,blockSize);
  followingBlock->sizeAndTags &= (~TAG_PRECEDING_USED);
  //Calculate Payload Size
  payloadSize = POINTER_SUB(SIZE(blockInfo->sizeAndTags),2*WORD_SIZE); //这个就不用了,因为题目里面的payloadSize,就是你的blockSize

  //Set Footer
  (*(size_t *)(POINTER_ADD(blockInfo,payloadSize))=(blockInfo->sizeAndTags));//
  //以上这个应该改为 
  //(*(size_t *)(POINTER_ADD(blockInfo,blockSize - WORD_SIZE))=(blockInfo->sizeAndTags));//
  PUT(FOOTER(blockInfo),blockInfo->sizeAndTags);//上面已经设置footer了,这个就不用了
  // Implement mm_free.  You can change or remove the declaraions
  // above.  They are included as minor hints.
  //
  //最后,设置完insertFreeBlock后,
  //你就直接coalesceFreeBlock(blockInfo),把blockInfo邻近的block合并下就好了.

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值