#define ALIGNMENT 8
#define CHUNK_SIZE (1<<12) //Extend heap by this amount (bytes)
#define WSIZE 4
#define DSIZE 8
#define MIN_BLOCK_SIZE (4*WSIZE) //Should it require at least 1 word of payload?
#define MAX(x,y) ((x) > (y) ? (x) : (y))
//Pack a size and allocated bit into a word
//#define PACK(size, alloc) ((size << 1 ) | (alloc))
//Read and write a word at address p
#define GET(p) (*(unsigned int*)(p))
#define PUT(p,val) (*(unsigned int *)(p) = (val))
//Read the size and allocated fields from address p
#define GET_SIZE(hp) (GET(hp)) //alli has doubts
//#define GET_ALLOC(hp) (GET(hp) & 0x1)
//Get next and prev block pointers from a block
#define GET_NEXT(hp) ((char*)(hp)+2*WSIZE)
#define GET_PREV(hp) ((char*)(hp)+1*WSIZE)
//Given block ptr bp, compute address of its header and footer
//Should we ever reference a block ptr in an explicit list?
#define HDRP(bp) ((char*)(bp) - 3 * WSIZE))
#define FTRP(bp) ((char*)(bp) + GET_SIZE(HDRP(bp)))
#define BP(hp) ((char*)(hp) + (3 * WSIZE))
/* rounds up to the nearest multiple of ALIGNMENT */
#define ALIGN(size) (((size) + (ALIGNMENT-1)) & ~0x7)
#define SIZE_T_SIZE (ALIGN(sizeof(size_t)))
我正在
错误:C)宏中的')'令牌之前的预期语句
我使用PUT的地方是:
static int extend_heap(size_t words) {
char* hp;
size_t size;
//This returns a ptr to the HEADER of the list allocatable block
void* last_block = find_end_of_free_list();
void* tail = GET_NEXT(last_block);
//Only allocate an even number of words to maintain alignment
size = (words % 2) ? (words+1) * WSIZE : words * WSIZE;
if((long)(hp = mem_sbrk(size)) == -1)
return -1;
//Maybe we should make a function (create header/create footer when given an address)
PUT(hp, size); //Free block header
PUT(FTRP(BP(hp)), size); //Free block footer
PUT(GET_PREV(hp), last_block); //Make prev of new block point to end of old list
PUT(GET_NEXT(hp), tail); //Make next of new block point to tail
PUT(GET_NEXT(last_block), hp); // Make next of old list point to new list
return 0;
}
我在PUT上收到错误 在extend_heap中,我得到另一个错误:
mm.c:121:3:注意:扩展宏'PUT' PUT(FTRP(BP(hp)),大小); //免费块页脚 ^ mm.c:53:49:错误:')'令牌之前的预期声明 #define PUT(p,val)(*(unsigned int *)(p)=(val))
我在PUT上面包含了代码,因为我认为错误可能是由于其上方的语法错误。
答案 0 :(得分:1)
该错误符合:
#define HDRP(bp) ((char*)(bp) - 3 * WSIZE))
最后有一个额外的)
。哪个应该删除。
由于在PUT
中您使用的是FTRP()
宏,因此在此宏HDRP()
之前,我们会看到此错误。
删除额外的)
将解决您的问题。