Ejemplo n.º 1
0
/* addfreeblock*/
static void *add_free_block(void *bp,size_t size){
	//dbg_printf("addfree%p\n",bp);
	//REQUIRES(in_heap(bp));
dbg_printf("add free%p %lu\n",bp,size);
	int list=0;
	size>>=5;
	while((list<18)&&(size>1)){
		size=size>>1;
		list++;
	}
	free_list=(void *)((uint32_t *)seg_list+list);//get free_list head

dbg_printf("add free list%d %p\n",list,free_list);
	set_succ(bp,get_succ_offset(free_list));
	set_pred(bp,get_offset(free_list));

	if (get_succ_offset(free_list)!=0)
	set_pred(succ_blkp(free_list),get_offset(bp));
	 
	//set new list header
	set_succ(free_list,get_offset(bp));

bp=free_list;
while(bp!=base){
dbg_printf("list: %p->:\n",bp);
bp=succ_blkp(bp);
}
	return bp;
}
Ejemplo n.º 2
0
//address
static void *add_free_block(void *bp){
	void* block;
	if (free_list==base){
	set_succ(bp,0);
	set_pred(bp,0);
	free_list=bp;	
	return bp;	
	}
int i=0;
block=free_list;
size_t block_off;	
while(block!=base){
	block_off=get_offset(block);
	if (get_offset(bp)<block_off){
		set_succ(bp,block_off);
		set_pred(bp,get_pred_offset(block));
		set_pred(block,get_offset(bp));		
		if (i==0)
			free_list=bp;			
		return bp;		
		}
		block=succ_blkp(block);
		i++;	
	}
set_succ(bp,0);
set_pred(bp,block_off);
set_succ(get_addr(block_off),get_offset(bp));
return bp;		
	
}
Ejemplo n.º 3
0
static void place(void *bp, size_t asize)   {
	//dbg_printf("place%p\n",bp);
    size_t csize = GET_SIZE(HDRP(bp));   
//	void *remain_blk;
size_t remain_size=csize-asize;
    if ((remain_size) >= 16) {
	void *remain_blk; 
	//delete_free_block(bp);	
		size_t predoff=get_pred_offset(bp);
		size_t succoff=get_succ_offset(bp);
		alloc_block(bp,asize);
		remain_blk= NEXT_BLKP(bp);
		PUT(HDRP(remain_blk), PACK(remain_size, 0));
		PUT(FTRP(remain_blk), PACK(remain_size, 0));
		size_t re_off=get_offset(remain_blk);
		set_succ(remain_blk,succoff);
		set_pred(remain_blk,predoff);
//	if (predoff){
		set_succ(get_addr(predoff),re_off);
//	}
//	else free_list=remain_blk;
	if (succoff){
		set_pred(get_addr(succoff),re_off);
		}
    }
    else { 
		delete_free_block(bp);
		PUT(HDRP(bp), PACK(csize, 1));
		PUT(FTRP(bp), PACK(csize, 1));
    }
}
Ejemplo n.º 4
0
/* addfreeblock*/
static void *add_free_block(void *bp){
	//dbg_printf("addfree%p\n",bp);
	//REQUIRES(in_heap(bp));
//printf("free%p",free_list);
	set_succ(bp,get_succ_offset(free_list));
	set_pred(bp,get_offset(free_list));

	if (get_succ_offset(free_list)!=0)
	set_pred(succ_blkp(free_list),get_offset(bp));
	 
	//set new list header
	set_succ(free_list,get_offset(bp));
	return bp;
}
Ejemplo n.º 5
0
/* addfreeblock*/
static void *add_free_block(void *bp){

	REQUIRES(in_heap(bp));

	set_succ(bp,get_offset(free_list));
	set_pred(bp,0);

	if (get_offset(free_list)!=0)
	set_pred(free_list,get_offset(bp));
	 
	//set new list header
	free_list=bp;
	return bp;
}
Ejemplo n.º 6
0
static void delete_free_block(void *bp){
	//dbg_printf("delete%p\n",bp);
	void *pred_block=pred_blkp(bp);
	void *succ_block=succ_blkp(bp);
	
//	if ((free_list== bp)&&(get_succ_offset(bp)==0)){
//	free_list=base;
//}
	/* if (get_pred_offset(bp)==0){//header
		set_pred(succ_block,0);
		free_list=succ_block;
	}*/
	set_succ(pred_block,get_succ_offset(bp));

/*	else if (get_succ_offset(bp)==0){
		set_succ(pred_block,0);
	}
	else {
		set_succ(pred_block,get_succ_offset(bp));
		set_pred(succ_block,get_pred_offset(bp));
	}
*/
	if (get_succ_offset(bp))
	set_pred(succ_block,get_pred_offset(bp));
}
Ejemplo n.º 7
0
static void delete_free_block(void *bp){
	
	void *pred_block=pred_blkp(bp);
	void *succ_block=succ_blkp(bp);

	if (get_pred_offset(bp)==0){//header
		set_pred(succ_block,0);
		free_list=succ_block;
	}
	else if (get_succ_offset(bp)==0){
		set_succ(pred_block,0);
	}
	else {
		set_succ(pred_block,get_succ_offset(bp));
		set_pred(succ_block,get_pred_offset(bp));
	}

}
Ejemplo n.º 8
0
static void delete_free_block(void *bp){

	dbg_printf("delete%p\n",bp);
	void *pred_block=pred_blkp(bp);
	void *succ_block=succ_blkp(bp);
	
	set_succ(pred_block,get_succ_offset(bp));

	if (get_succ_offset(bp))
	set_pred(succ_block,get_pred_offset(bp));
}
Ejemplo n.º 9
0
//address
static void *add_free_block(void *bp) {
//dbg_printf("addfree%p\n",bp);
    void* block;
    if (free_list==base) {
        set_succ(bp,0);
        set_pred(bp,0);
        free_list=bp;
        return bp;
    }
//int i=0;
    block=free_list;
    size_t block_off;
    while(block!=base) {
//printf("freehead%p",block);
        block_off=get_offset(block);
        if (get_offset(bp)<block_off) {
            set_succ(bp,block_off);
            set_pred(bp,get_pred_offset(block));
            void *pred=pred_blkp(block);
            set_pred(block,get_offset(bp));
            if (block==free_list)
                free_list=bp;
            else {
                set_succ(pred,get_offset(bp));
            }//printf("add%p %p %p %p\n",bp,pred_blkp(bp),succ_blkp(bp),block);
            return bp;
        }
        block=succ_blkp(block);
        //	i++;
    }
    set_succ(bp,0);
    set_pred(bp,block_off);
    set_succ(get_addr(block_off),get_offset(bp));
    return bp;

}
Ejemplo n.º 10
0
Archivo: main.c Proyecto: rpreen/xcsf
void trial(int cnt, _Bool train, double *err)
{
	// get problem function state and solution
	double *state = func_state(train);
	double answer = func_answer(train);
	// create match set
	NODE *mset = NULL, *kset = NULL;
	int msize = 0, mnum = 0;
	set_match(&mset, &msize, &mnum, state, cnt, &kset);
	// calculate system prediction and track performance
	double pre = set_pred(&mset, msize, state);
	err[cnt%PERF_AVG_TRIALS] = fabs(answer - pre);
	if(train) {
		// provide reinforcement to the set
		set_update(&mset, &msize, &mnum, answer, &kset, state);
		// run the genetic algorithm
		ga(&mset, msize, mnum, cnt, &kset);
	}
	// clean up
	set_kill(&kset); // kills deleted classifiers
	set_free(&mset); // frees the match set list
}
Ejemplo n.º 11
0
static void* coalesce_free(void *bp) //bp point to header
{
    dbg_printf("coalesce free %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));
        size_t predoff=get_pred_offset(next_blk);
        size_t succoff=get_succ_offset(next_blk);
        set_pred(bp,predoff);
        set_succ(bp,succoff);
        if(predoff) {
            set_succ(get_addr(predoff),get_offset(bp));
        } else {
            free_list=bp;
        }
        if(succoff)
            set_pred(get_addr(succoff),get_offset(bp));

    }

    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));
//size_t predoff=get_pred_offset(prev_blk);
        size_t succoff=get_succ_offset(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;
        //set_pred(bp,predoff);
        set_succ(bp,succoff);
        //if(predoff){
        //set_succ(get_addr(predoff),get_offset(bp));
        //free_list=bp;
        //	}
        if(succoff)
            set_pred(get_addr(succoff),get_offset(bp));


    }

//	add_free_block(bp);
    return bp;

}