您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ GET_ALLOC函数代码示例

51自学网 2021-06-01 20:50:52
  C++
这篇教程C++ GET_ALLOC函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中GET_ALLOC函数的典型用法代码示例。如果您正苦于以下问题:C++ GET_ALLOC函数的具体用法?C++ GET_ALLOC怎么用?C++ GET_ALLOC使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了GET_ALLOC函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1:

static inline void *find_fit(size_t asize){  void *bp;  for (bp = heap_listp; GET_SIZE(HDRP(bp))>0; bp = NEXT_BLKP(bp)) {    if (!GET_ALLOC(HDRP(bp)) && (asize <= GET_SIZE(HDRP(bp))))      return bp;  }  return NULL;}
开发者ID:alexmadjar,项目名称:213malloc,代码行数:9,


示例2: GET_ALLOC

static void *coalesce(void *bp){    size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp)));    size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));    size_t size = GET_SIZE(HDRP(bp));    if(prev_alloc && next_alloc) //101    {        add_free(bp);        //return bp;    }    else if(prev_alloc && !next_alloc) //100    {        rm_free(NEXT_BLKP(bp));        size += GET_SIZE(HDRP(NEXT_BLKP(bp)));        PUT(HDRP(bp), PACK(size, 0));        PUT(FTRP(bp), PACK(size, 0));        add_free(bp);    }    else if(!prev_alloc && next_alloc) //001    {        size += GET_SIZE(HDRP(PREV_BLKP(bp)));        PUT(FTRP(bp), PACK(size, 0));        PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));        bp = PREV_BLKP(bp);    }    else //000    {        rm_free(NEXT_BLKP(bp));        size += GET_SIZE(HDRP(NEXT_BLKP(bp))) +                 GET_SIZE(HDRP(PREV_BLKP(bp)));        PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));        PUT(FTRP(NEXT_BLKP(bp)), PACK(size, 0));        bp = PREV_BLKP(bp);    }    return bp;}
开发者ID:YeXiaoRain,项目名称:ICS_LAB,代码行数:44,


示例3: GET_ALLOC

/* * coalesce - Coalesce adjacent free blocks. Sort the new free block into the *            appropriate list. */static void *coalesce(void *ptr){  size_t prev_alloc = GET_ALLOC(HEAD(PREV(ptr)));  size_t next_alloc = GET_ALLOC(HEAD(NEXT(ptr)));  size_t size = GET_SIZE(HEAD(ptr));  /* Return if previous and next blocks are allocated */  if (prev_alloc && next_alloc) {    return ptr;  }  /* Do not coalesce with previous block if it is tagged */  if (GET_TAG(HEAD(PREV(ptr))))    prev_alloc = 1;  /* Remove old block from list */  delete_node(ptr);  /* Detect free blocks and merge, if possible */  if (prev_alloc && !next_alloc) {    delete_node(NEXT(ptr));    size += GET_SIZE(HEAD(NEXT(ptr)));    PUT(HEAD(ptr), PACK(size, 0));    PUT(FOOT(ptr), PACK(size, 0));  } else if (!prev_alloc && next_alloc) {    delete_node(PREV(ptr));    size += GET_SIZE(HEAD(PREV(ptr)));    PUT(FOOT(ptr), PACK(size, 0));    PUT(HEAD(PREV(ptr)), PACK(size, 0));    ptr = PREV(ptr);  } else {    delete_node(PREV(ptr));    delete_node(NEXT(ptr));    size += GET_SIZE(HEAD(PREV(ptr))) + GET_SIZE(HEAD(NEXT(ptr)));    PUT(HEAD(PREV(ptr)), PACK(size, 0));    PUT(FOOT(NEXT(ptr)), PACK(size, 0));    ptr = PREV(ptr);  }  /* Adjust segregated linked lists */  insert_node(ptr, size);  return ptr;}
开发者ID:bloveless,项目名称:malloclab,代码行数:48,


示例4: coalesce

static void* coalesce(void* bp) { size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp))); size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp))); size_t size = GET_SIZE(HDRP(bp));    /* if previous and next are allocated do nothing */    if (prev_alloc && next_alloc)    {    return bp;    }/* if next is not allocated */ else if (prev_alloc && !next_alloc) {    size += GET_SIZE(HDRP(NEXT_BLKP(bp)));    PUT(HDRP(bp), PACK(size, 0));    PUT(FTRP(bp), PACK(size ,0));    /* this node's successor is the next node's */    size_t oldSucc = SCRP(NEXT_BLKP(bp));    PUT(SCRP(bp), oldSucc);    return(bp); } else if (!prev_alloc && next_alloc) {    size += GET_SIZE(HDRP(PREV_BLKP(bp)));    PUT(FTRP(bp), PACK(size, 0));    PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));    size_t oldSucc = SCRP(PREV_BLKP(bp));    PUT(SCRP(PREV_BLKP(bp)), oldSucc);    return(PREV_BLKP(bp)); } else {    size += GET_SIZE(HDRP(PREV_BLKP(bp))) +    GET_SIZE(FTRP(NEXT_BLKP(bp)));    PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));    PUT(FTRP(NEXT_BLKP(bp)), PACK(size, 0));    return(PREV_BLKP(bp)); }}
开发者ID:hshelton,项目名称:cs4400,代码行数:44,


示例5: GET_ALLOC

static void *coalesce(void *bp){	size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp))) || (PREV_BLKP(bp) == bp);	size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));	size_t size = GET_SIZE(HDRP(bp));	if (prev_alloc && next_alloc)	{		// Do nothing	}	else if (prev_alloc && !next_alloc)	{		size += GET_SIZE(HDRP(NEXT_BLKP(bp)));		remove_block(NEXT_BLKP(bp),GET_SIZE(HDRP(NEXT_BLKP(bp))));		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size,0));	}	else if (!prev_alloc && next_alloc)	{		size += GET_SIZE(HDRP(PREV_BLKP(bp)));		bp = PREV_BLKP(bp);		remove_block(bp,GET_SIZE(HDRP(bp)));		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size, 0));	}	else	{		size += GET_SIZE(HDRP(PREV_BLKP(bp))) + GET_SIZE(HDRP(NEXT_BLKP(bp)));		void *pbp = PREV_BLKP(bp);		remove_block(pbp, GET_SIZE(HDRP(pbp)));		void *nbp = NEXT_BLKP(bp);		remove_block(nbp, GET_SIZE(HDRP(nbp)));		bp = PREV_BLKP(bp);		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size, 0));	}	insert_free_list(bp,size);	return bp;}
开发者ID:niloygupta,项目名称:malloclab,代码行数:44,


示例6: GET_ALLOC

/* * coalesce - Boundary tag coalescing. Return ptr to coalesced block */static void *coalesce(void *bp){  size_t NEXT_ALLOC = GET_ALLOC(  HDRP(NEXT_BLK(bp))  );  size_t PREV_ALLOC = GET_ALLOC(  HDRP(PREV_BLK(bp))  );  //size_t PREV_ALLOC = GET_ALLOC(  FTRP(PREV_BLK(bp))  ) || PREV_BLK(bp) == bp;  size_t size = GET_SIZE(HDRP(bp));    /*return if the previous and next blocks are both allocated */  if (PREV_ALLOC && NEXT_ALLOC)  {	return bp;  }    /*Remove old block from list*/  delete_node(bp);    if (PREV_ALLOC && !NEXT_ALLOC)  {	delete_node(NEXT_BLK(bp));	size += GET_SIZE(HDRP(NEXT_BLK(bp)));	PUT(HDRP(bp), PACK(size, 0));	PUT(FTRP(bp), PACK(size, 0));  }  else if (!PREV_ALLOC && NEXT_ALLOC)  {	delete_node(PREV_BLK(bp));	size += GET_SIZE(HDRP(PREV_BLK(bp)));	PUT(FTRP(bp), PACK(size, 0));	PUT(HDRP(PREV_BLK(bp)), PACK(size, 0));	bp = PREV(bp);  }  else  {	delete_node(PREV_BLK(bp));	delete_node(NEXT_BLK(bp));	size += GET_SIZE(HDRP(PREV_BLK(bp))) + GET_SIZE(HDRP(NEXT_BLK(bp)));	PUT(HDRP(PREV_BLK(bp)), PACK(size, 0));	PUT(FTRP(NEXT_BLK(bp)), PACK(size, 0));	bp = PREV_BLK(bp);  }    insert_node(bp, size);  return bp;}
开发者ID:peterhad313,项目名称:malloc-lab,代码行数:47,


示例7: GET_ALLOC

static void *coalesce(void *ptr){    size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(ptr)));    size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(ptr)));    size_t size = GET_SIZE(HDRP(ptr));    if (prev_alloc && next_alloc) {                 /* Case 1 */        printf("Go into case 1/n");        add_lst(ptr);        return ptr;    }    else if (prev_alloc && !next_alloc) {           /* Case 2 */        size += GET_SIZE(HDRP(NEXT_BLKP(ptr)));        printf("Go into case 2/n");        remove_lst(NEXT_BLKP(ptr));        PUT(HDRP(ptr), PACK(size, 0));        PUT(FTRP(ptr), PACK(size,0));        add_lst(ptr);    }    else if (!prev_alloc && next_alloc) {           /* Case 3 */        printf("Go into case 3/n");        size += GET_SIZE(HDRP(PREV_BLKP(ptr)));        PUT(FTRP(ptr), PACK(size, 0));        PUT(HDRP(PREV_BLKP(ptr)), PACK(size, 0));        ptr = PREV_BLKP(ptr);        remove_lst(ptr);        add_lst(ptr);    }    else {                                          /* Case 4 */        printf("Go into case 4/n");        size += GET_SIZE(HDRP(PREV_BLKP(ptr))) +        GET_SIZE(FTRP(NEXT_BLKP(ptr)));        remove_lst(NEXT_BLKP(ptr));        PUT(HDRP(PREV_BLKP(ptr)), PACK(size, 0));        PUT(FTRP(NEXT_BLKP(ptr)), PACK(size, 0));        ptr = PREV_BLKP(ptr);        remove_lst(ptr);        add_lst(ptr);    }    return ptr;}
开发者ID:karn806,项目名称:MallocLab_H-K,代码行数:44,


示例8: printblock

static void printblock(void *bp) {    size_t hsize, halloc, fsize, falloc;    checkheap(0);    hsize = GET_SIZE(HDRP(bp));    halloc = GET_ALLOC(HDRP(bp));      fsize = GET_SIZE(FTRP(bp));    falloc = GET_ALLOC(FTRP(bp));      if (hsize == 0) {        printf("%p: EOL/n", bp);        return;    }    /*  printf("%p: header: [%p:%c] footer: [%p:%c]/n", bp, 	hsize, (halloc ? 'a' : 'f'), 	fsize, (falloc ? 'a' : 'f')); */}
开发者ID:illucination3782,项目名称:6-malloc,代码行数:19,


示例9: printblock

static void printblock(void *bp) {    size_t hsize, halloc, fsize, falloc;   // checkheap(0);    hsize = GET_SIZE(HDRP(bp));    halloc = GET_ALLOC(HDRP(bp));      fsize = GET_SIZE(FTRP(bp));    falloc = GET_ALLOC(FTRP(bp));      if (hsize == 0) {		dbg_printf("%p: EOL/n", bp);	return;    }     dbg_printf("%p: header: [%u:%c] footer: [%u:%c]/n", bp, 	(uint32_t)	hsize, (halloc ? 'a' : 'f'), 	(uint32_t)fsize, (falloc ? 'a' : 'f')); }
开发者ID:hailunz,项目名称:Computer_System_labs,代码行数:19,


示例10: GET_ALLOC

/* $begin coalesce */static void *coalesce(void *bp) //bp point to header{	void *prev_block=prev_blkp(bp);	void *next_block=next_blkp(bp);    uint32_t prev_alloc = GET_ALLOC(prev_block);    uint32_t next_alloc = GET_ALLOC(next_block);    uint32_t size = GET_SIZE(bp);    if (prev_alloc && next_alloc) {            /* Case 1 */		return bp;    }    else if (prev_alloc && !next_alloc) {      /* Case 2 */	size += GET_SIZE(next_block);	delete_free_block(next_block);	PUT(bp, PACK(size, 0));	PUT(FTRP1(bp), PACK(size,0));    }    else if (!prev_alloc && next_alloc) {      /* Case 3 */	size += GET_SIZE(prev_block);	delete_free_block(prev_block);	PUT(FTRP1(bp), PACK(size, 0));	PUT(prev_block, PACK(size, 0));	bp = prev_block;    }    else {                                     /* Case 4 */	size += GET_SIZE(prev_block) + 	    GET_SIZE(next_block);	delete_free_block(prev_block);	delete_free_block(next_block);	PUT(prev_block, PACK(size, 0));	PUT(FTRP1(next_block), PACK(size, 0));	bp = prev_block;    }	add_free_block(bp);	return bp;	}
开发者ID:hailunz,项目名称:Computer_System_labs,代码行数:44,


示例11: printblock

static void printblock(void *bp) {  size_t hsize, halloc, fsize, falloc;  hsize = GET_SIZE(HDRP(bp));  halloc = GET_ALLOC(HDRP(bp));    fsize = GET_SIZE(FTRP(bp));  falloc = GET_ALLOC(FTRP(bp));        if (hsize == 0) {    printf("%p: EOL/n", bp);    return;  }  printf("%p: header: [%d:%c] footer: [%d:%c]/n",	 bp, 	 (int) hsize, (halloc ? 'a' : 'f'), 	 (int) fsize, (falloc ? 'a' : 'f')); }
开发者ID:CSUChico-CSCI540,项目名称:CSCI540-MallocLab,代码行数:19,


示例12: coalesce

static void* coalesce(void *bp) //bp point to header{	//dbg_printf("coalesce %p/n",bp);	void *prev_blk=PREV_BLKP(bp);	void *next_blk=NEXT_BLKP(bp);	size_t prev_alloc = GET_ALLOC(FTRP(prev_blk));    size_t next_alloc = GET_ALLOC(HDRP(next_blk));    size_t size = GET_SIZE(HDRP(bp));	    if (prev_alloc && next_alloc) {            /* Case 1 */		add_free_block(bp);		return bp;    }    else if (prev_alloc && !next_alloc) {      /* Case 2 */		size += GET_SIZE(HDRP(next_blk));		delete_free_block(next_blk);		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size,0));    }    else if (!prev_alloc && next_alloc) {      /* Case 3 */		size += GET_SIZE(HDRP(prev_blk));		delete_free_block(prev_blk);		PUT(FTRP(bp), PACK(size, 0));		PUT(HDRP(prev_blk), PACK(size, 0));		bp = prev_blk;    }    else {                                     /* Case 4 */		size += GET_SIZE(HDRP(prev_blk)) + 	    GET_SIZE(FTRP(next_blk));		delete_free_block(prev_blk);		delete_free_block(next_blk);		PUT(HDRP(prev_blk), PACK(size, 0));		PUT(FTRP(next_blk), PACK(size, 0));		bp = prev_blk;   }	add_free_block(bp);    return bp;	}
开发者ID:hailunz,项目名称:Computer_System_labs,代码行数:43,


示例13: while

static void *find_fit(size_t size) {  char *bp = heap_listp;  while (GET_SIZE(HDRP(bp))) {    if (!GET_ALLOC(HDRP(bp)) && GET_SIZE(HDRP(bp)) >= size) {      return bp;    }    bp = NEXT_BLKP(bp);  }  return NULL;}
开发者ID:gigi13164269,项目名称:blog-1,代码行数:10,


示例14: find_fit

void* find_fit(size_t size){    void* temp = heap_ptr;    while(*NEXT_BLKP(temp) > 0){    //Keep on going while not footer block        if(GET_ALLOC(temp) && (GET_SIZE(temp) > size))            return temp;        temp = NEXT_BLKP(temp);    }    return NULL; //Didn't find a block so returning NULL}
开发者ID:jboullianne,项目名称:csc252,代码行数:10,


示例15: GET_ALLOC

void *coalesce(void *bp){    size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp)));    size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));    size_t size = GET_SIZE(HDRP(bp));    if (prev_alloc && next_alloc) {    	add_freelist(bp);      /* Case:1 Both previous block and next block are allocated*/        return bp;    }    else if (!prev_alloc && next_alloc) {   	void *prev = PREV_BLKP(bp);   /* Case:2  Previous is free and next block is allocated*/        delete_freelist(prev);        size += GET_SIZE(HDRP(PREV_BLKP(bp)));        PUT(FTRP(bp), PACK(size, 0));        PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));    	add_freelist(PREV_BLKP(bp));        	return (PREV_BLKP(bp));    }    else if (prev_alloc && !next_alloc) {  	void *next = NEXT_BLKP(bp);        /* Case:3 Previous is allocated and next block is free  */        delete_freelist(next);        size += GET_SIZE(HDRP(NEXT_BLKP(bp)));        PUT(HDRP(bp), PACK(size, 0));        PUT(FTRP(bp), PACK(size, 0));   	add_freelist(bp);       	return (bp);    }    else {               	void *prev = PREV_BLKP(bp); /* Case:4 Both previous and next block are free*/        void *next = NEXT_BLKP(bp);        delete_freelist(prev);        delete_freelist(next);        size += GET_SIZE(HDRP(PREV_BLKP(bp)))  + GET_SIZE(FTRP(NEXT_BLKP(bp)))  ;        PUT(HDRP(PREV_BLKP(bp)), PACK(size,0));        PUT(FTRP(NEXT_BLKP(bp)), PACK(size,0));	add_freelist(PREV_BLKP(bp));        return (PREV_BLKP(bp));    }}
开发者ID:Frequently,项目名称:Malloc,代码行数:43,


示例16: mm_checkheap

/*  * mm_checkheap - Check the heap for consistency  */void mm_checkheap(int verbose) {	//printf("************ CHECK BEGIN ***************/n");    char *bp = heap_listp;	char *checkAll = heap_listp;	int countblocks = -1;    if (verbose) {        printf("Heap: (%p)/n", heap_listp);    }    if ((GET_SIZE(HDRP(heap_listp)) != OVERHEAD) || !GET_ALLOC(HDRP(heap_listp))) {        printf("Bad prologue header/n");    }    checkblock(heap_listp);			 while(GET(SUCC(bp)) != 0){		if(verbose == 1)		 	printblock(bp);		checkblock(bp);		//countblocks++;		bp = (char*)GET(SUCC(bp));	}	 if(verbose == 1)		 printblock(bp);    for (checkAll = heap_listp; GET_SIZE(HDRP(checkAll)) > 0; checkAll = NEXT_BLKP(checkAll)) {		if(!GET_ALLOC(HDRP(checkAll)) && !block_in_free_list(checkAll)){			printf("Block is marked free but not in free list/n");				}        checkblock(checkAll);		countblocks++;    }	//printf("Number of free blocks: %d/n", freeblockcount);	//printf("Total number of blocks: %d/n", countblocks);        if ((GET_SIZE(HDRP(checkAll)) != 0) || !(GET_ALLOC(HDRP(checkAll)))) {        printf("Bad epilogue header/n");    }	//printf("****************** CHECK END ********************/n");}
开发者ID:olikari,项目名称:malloclab,代码行数:46,


示例17: checkblock

/** * checkblock - check the current block for consistency * @param bp Block to be checked */static void checkblock(void *bp) {    /**     * Checks-     * 1) Check for alignment     * 2) Check for Header and Footer Match     * 3) Check for the block to be in heap     * 4) Check coalescing- no previous/next free blocks if current is free.     */        /*Check Block for alignment*/    if ((size_t)bp % 8) {       printf("ERROR: %p is not doubleword aligned/n", bp);    }    /*Check Block Header matching Footer*/    if (GET(HDRP(bp)) != GET(FTRP(bp))) {        printf("ERROR: header does not match footer/n");        dbg_printf("**Debug Info /n");        dbg_printf("Heap_listp = %p /n", heap_listp );        dbg_printf("Block %p /n", bp );    }     /* Check for if the block is in the heap */           if( !in_heap(bp)) {        printf("ERROR: %p is not in heap /n", bp);            }    /**     * Concept : As all the blocks are iteratively checked, just checking     *           next block for coalescing will suffice next/previous block     *           checks.     */        /* Check Coalescing with Next Block */    if( GET_ALLOC(HDRP(bp)) ==0 && NEXT_BLKP(bp)!=NULL         && GET_ALLOC(HDRP(NEXT_BLKP(bp))) ==0 ) {        printf("ERROR: %p is not coalesced with next block/n", bp);                print_all();        exit(1);    }}
开发者ID:AceYuRanger,项目名称:MallocLab,代码行数:46,


示例18: logg

/********************************************************** * coalesce * Covers the 4 cases discussed in the text: * - both neighbours are allocated * - the next block is available for coalescing * - the previous block is available for coalescing * - both neighbours are available for coalescing **********************************************************/void *coalesce(void *bp){    logg(4, "============ coalesce() starts ==============");    logg(1, "coalesce() called with bp: %p; Previous block: %p header: %zx; Next block: %p header: %zx", bp, PREV_BLKP(bp), GET(HDRP(PREV_BLKP(bp))), NEXT_BLKP(bp), GET(HDRP(NEXT_BLKP(bp))));    size_t prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp)));    size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));    size_t size = GET_SIZE(HDRP(bp));    if (prev_alloc && next_alloc) {       /* Case 1 */        logg(2, "Case 1: Both prev and next blocks are allocated. NO coalescing.");    }    else if (prev_alloc && !next_alloc) { /* Case 2 */        logg(2, "Case2: Next block is free.");        size += GET_SIZE(HDRP(NEXT_BLKP(bp)));        remove_free_block(NEXT_BLKP(bp));        PUT(HDRP(bp), PACK(size, 0));        PUT(FTRP(bp), PACK(size, 0));    }    else if (!prev_alloc && next_alloc) { /* Case 3 */        logg(2, "Case3: Prev block is free.");        size += GET_SIZE(HDRP(PREV_BLKP(bp)));        remove_free_block(PREV_BLKP(bp));        bp = PREV_BLKP(bp);     // move bp one block ahead        PUT(HDRP(bp), PACK(size, 0));        PUT(FTRP(bp), PACK(size, 0));    }    else {            /* Case 4 */        logg(2, "Case4: Both blocks are free.");        size += GET_SIZE(HDRP(PREV_BLKP(bp)))  + GET_SIZE(HDRP(NEXT_BLKP(bp)))  ;        remove_free_block(NEXT_BLKP(bp));        remove_free_block(PREV_BLKP(bp));        bp = PREV_BLKP(bp);        PUT(HDRP(bp), PACK(size,0));        PUT(FTRP(bp), PACK(size,0));    }    // Add the bp block to the beginning of free list of corresponding size.    add_free_block(bp);    logg(4, "============ coalesce() ends ==============");    return bp;}
开发者ID:tabletenniser,项目名称:ECE454_hw3,代码行数:50,


示例19: GET_ALLOC

/* * coalesce - boundary tag coalescing. * This function joins adjecent free blocks together by * finding the size (newsize) of the new (bigger) free block, removing the * free block(s) from the free list, and changing the header * and footer information to the newly coalesced free block * (size = newsize, allocated = 0) * Then, we add the new free block to the front of the free list. * * This function takes a block pointer to the newly freed block (around which * we must coalesce) and returns the block pointer to the coalesced free * block. * Return ptr to coalesced block */static void *coalesce(void *bp){	size_t prev_alloc;	prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp))) || PREV_BLKP(bp) == bp;	size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));	size_t size = GET_SIZE(HDRP(bp));    	/* Case 1, extend the block leftward */	if (prev_alloc && !next_alloc)	{		size += GET_SIZE(HDRP(NEXT_BLKP(bp)));		removeBlock(NEXT_BLKP(bp));		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size, 0));	}    	/* Case 2, extend the block rightward */	else if (!prev_alloc && next_alloc)	{		size += GET_SIZE(HDRP(PREV_BLKP(bp)));		bp = PREV_BLKP(bp);		removeBlock(bp);		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size, 0));	}    	/* Case 3, extend the block in both directions */	else if (!prev_alloc && !next_alloc)	{		size += GET_SIZE(HDRP(PREV_BLKP(bp))) +        GET_SIZE(HDRP(NEXT_BLKP(bp)));		removeBlock(PREV_BLKP(bp));		removeBlock(NEXT_BLKP(bp));		bp = PREV_BLKP(bp);		PUT(HDRP(bp), PACK(size, 0));		PUT(FTRP(bp), PACK(size, 0));	}		insertAtFront(bp);		return bp;}
开发者ID:liopei19nn,项目名称:15213_LIP,代码行数:56,


示例20: mm_checkheap

/* * mm_checkheap - Checks the invariants of the heap * This function checks the invariants of the heap such as header-footer match, * absence of contiguous blocks of free memory and confirmation that the * block pointers are within the heaps boundaries. */void mm_checkheap(int verbose){  void *bp = heap_listp; //Points to the first block in the heap  verbose = verbose;  /* If first block's header's size or allocation bit is wrong,   * the prologue header is incorrect. */  if ((GET_SIZE(HDRP(heap_listp)) != MINBLOCKSIZE) ||      !GET_ALLOC(HDRP(heap_listp)))    printf("Bad prologue header/n");  checkblock(bp);  for (bp = heap_listp; GET_SIZE(HDRP(bp)) > 0; bp = NEXT_BLKP(bp))    {      if (verbose)	printblock(bp);      if(GET_SIZE(HDRP(bp)) == 0)	printf("Error: block has zero size/n");      checkblock(bp);      /* Checking to see if free block in the free list */      if(!GET_ALLOC(HDRP(bp)))	checkInFreeList(bp);    }  /* If last block's header's size or allocation bit is wrong,   * the epilogue's header is wrong. We also check the specific location   * of the epilogue header with respect to the last byte of the heap.   * mem_heap_hi() and bp(at this point) both point to the same word,   * but mem_heap_hi() points to the last byte and hence we must add 3 to   * the address of the header of bp to check this condition.   */  if (GET_SIZE(HDRP(bp)) != 0 || (GET_ALLOC(HDRP(bp)) != 1)      || (HDRP(bp) + WSIZE - 1) != mem_heap_hi())    printf("Bad epilogue header/n");  for(bp = free_listp; GET_ALLOC(HDRP(bp)) == 0; bp = NEXT_FREE(bp))    checkFreeNodes(bp);}
开发者ID:aaiyer123,项目名称:malloc,代码行数:48,


示例21:

static void *find_fit(size_t asize){    /* First fit search */    void *ptr;    for (ptr = heap_listp; GET_SIZE(HDRP(ptr)) > 0; ptr = NEXT_BLKP(ptr)) {        if (!GET_ALLOC(HDRP(ptr)) && (asize <= GET_SIZE(HDRP(ptr)))) {            return ptr;        }    }    return NULL; /* No fit */}
开发者ID:karn806,项目名称:MallocLab_H-K,代码行数:11,


示例22: isNextEiplog

/********************************************************** * This function checks the next block to see * if it is the epilog block **********************************************************/int isNextEiplog(void * bp){    void * next = NEXT_BLKP(bp);    if(next == NULL)        return 0;    if(GET_SIZE(HDRP(next))==0 && GET_ALLOC(HDRP(next)) == 0x1)        return 1;    else        return 0;}
开发者ID:chznight,项目名称:assn3-malloc,代码行数:15,


示例23:

static void *find_fit(size_t asize){    /*first-fit search of the implicit free list */    void *bp;    for (bp = heap_listp; GET_SIZE(HDRP(bp)) > 0; bp = NEXT_BLKP(bp)) {        if (!GET_ALLOC(HDRP(bp)) && (asize <= GET_SIZE(HDRP(bp)))) {            return bp;        }    }    return NULL; /* No fit */}
开发者ID:nmank,项目名称:comp-organization,代码行数:11,


示例24: GET_SIZE

/* * mm_realloc - Implemented simply in terms of mm_malloc and mm_free */void *mm_realloc(void *ptr, size_t size){    size_t oldsize = GET_SIZE(HDRP(ptr));    size_t asize;    void *newptr;    if(ptr == NULL) return mm_malloc(size);    else if(size == 0)    {        mm_free(ptr);        return NULL;    }    if(size <= DSIZE) asize = 2 * DSIZE;    else asize = DSIZE * ((size + (DSIZE) + (DSIZE - 1)) / DSIZE);        if(asize <= oldsize)    {        //ptr = replace(ptr, asize);        return ptr;    }    else //next block    {    	size_t next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(ptr)));        size_t next_size = GET_SIZE(HDRP(NEXT_BLKP(ptr)));	    if(!next_alloc && (oldsize + next_size) >= asize)        {            rm_free(NEXT_BLKP(ptr));            PUT(HDRP(ptr), PACK(oldsize + next_size, 1));            PUT(FTRP(ptr), PACK(oldsize + next_size, 1));            return ptr;        }        /*else if(next_size == 0)        {            if(extend_heap(CHUNKSIZE / WSIZE) == NULL) return 0;            next_size = GET_SIZE(HDRP(NEXT_BLKP(ptr)));            rm_free(NEXT_BLKP(ptr));            PUT(HDRP(ptr), PACK(oldsize + next_size, 1));            PUT(FTRP(ptr), PACK(oldsize + next_size, 1));            return replace(ptr, asize);        }*/        else        {            newptr = mm_malloc(size);            memcpy(newptr, ptr, oldsize);            mm_free(ptr);            return newptr;        }    }}
开发者ID:YeXiaoRain,项目名称:ICS_LAB,代码行数:57,


示例25: printblock

/* * Requires: *   "bp" is the address of a block. * * Effects: *   Print the block "bp". */static void printblock(void *bp){	bool halloc, falloc;	size_t hsize, fsize;	checkheap(false);	hsize = GET_SIZE(HDRP(bp));	halloc = GET_ALLOC(HDRP(bp));  	fsize = GET_SIZE(FTRP(bp));	falloc = GET_ALLOC(FTRP(bp));  	if (hsize == 0) {		printf("%p: end of heap/n", bp);		return;	}	printf("%p: header: [%zu:%c] footer: [%zu:%c]/n", bp, 	       hsize, (halloc ? 'a' : 'f'), 	       fsize, (falloc ? 'a' : 'f'));}
开发者ID:jcjcarter,项目名称:Malloc,代码行数:27,


示例26: find_fit

/* * Requires: *   None. * * Effects: *   Find a fit for a block with "asize" bytes.  Returns that block's address *   or NULL if no suitable block was found.  */static void *find_fit(size_t asize){	void *bp;	for (bp = free_listp; GET_ALLOC(HDRP(bp)) == 0; bp = *GETNEXT(bp))	{		if (asize <= GET_SIZE(HDRP(bp)))			return bp;    	}	return NULL;}
开发者ID:jcjcarter,项目名称:Malloc,代码行数:19,


示例27: find_fit

static void* find_fit(size_t asize) { void* bp; /* first fit search */ for(bp = heap_listp; GET_SIZE(HDRP(bp)) > 0; bp = NEXT_BLKP(bp)) {    if(!GET_ALLOC(HDRP(bp)) && (asize <= GET_SIZE(HDRP(bp)))) {    return bp;    } } return NULL; /* no fit */}
开发者ID:hshelton,项目名称:cs4400,代码行数:11,


示例28: print_block

/* prints a single block */void print_block(void* bp) {#if DEBUG >= 3    //printf("print_block/n");#endif	//int allocated = GET_ALLOC(HDRP(bp));	//int size = GET_SIZE(HDRP(bp));	printf("%p | allocated: %1lu | size %6u | %6u words | %p/n ",			bp, GET_ALLOC(HDRP(bp)), GET_SIZE(HDRP(bp)),GET_SIZE(FTRP(bp)),FTRP(bp));		}
开发者ID:bkashyap,项目名称:ece454,代码行数:12,


示例29: while

static void *find_fit(size_t asize){    void *bp;    bp = endfree;    /*first fit search*/    while (bp != NULL) {        if (!GET_ALLOC(HDRP(bp)) && (asize <= GET_SIZE(HDRP(bp))))	    return bp;	bp = PREV(bp);    }    return NULL;}
开发者ID:RayneZhang,项目名称:csapp-lab,代码行数:11,


示例30:

static void *find_fit(size_t asize){  void *bp;  for (bp = free_listp; GET_ALLOC(HDRP(bp)) == 0; bp = GET_NEXT_FREE(bp) ){    if (asize <= (size_t)GET_SIZE(HDRP(bp)) ) {      return bp;    }      }  return NULL;}
开发者ID:peterhad313,项目名称:malloc-lab,代码行数:11,



注:本文中的GET_ALLOC函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ GET_ALPHA_BETA_FROM_QP函数代码示例
C++ GETWORD函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。