rem: qm->init_size=init_size; qm->size=size-init_overhead;
add: size-=init_overhead; qm->size=size;
context: struct qm_block* qm_malloc_init(char* address, unsigned int size){	char* start;	char* end;	struct qm_block* qm;	unsigned int init_overhead;	unsigned int init_size;		init_size=size;	/* make address and size multiple of 8*/	start=(char*)( ((unsigned int)address%8)?((unsigned int)address+8)/8*8:			(unsigned int)address);	if (size<start-address) return 0;	size-=(start-address);	if (size <8) return 0;	size=(size%8)?(size-8)/8*8:size;		init_overhead=sizeof(struct qm_block)+sizeof(struct qm_frag)+		sizeof(struct qm_frag_end);	if (size < init_overhead)	{		/* not enough mem to create our control structures !!!*/		return 0;	}	end=start+size;	qm=(struct qm_block*)start;	memset(qm, 0, sizeof(struct qm_block));	qm->init_size=init_size;	qm->size=size-init_overhead;	qm->real_used=init_overhead;		qm->first_frag=(struct qm_frag*)(start+sizeof(struct qm_block));	qm->last_frag_end=(struct qm_frag_end*)(end-sizeof(struct qm_frag_end));	/* init initial fragment*/	qm->first_frag->size=size;	qm->first_frag->u.nxt_free=&(qm->free_lst);	qm->last_frag_end->size=size;	qm->last_frag_end->prev_free=&(qm->free_lst);	/* init free_lst* */	qm->free_lst.u.nxt_free=qm->first_frag;	qm->free_lst_end.prev_free=qm->first_frag;	qm->free_lst.size=0;	qm->free_lst_end.size=0;			return qm;}