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合并下就好了.
}
mm_free()
最新推荐文章于 2022-03-23 21:45:44 发布