본문 바로가기

IT Tech/Programming

[C언어] Fast Integer ID Pool 관리 - 할당/반환 함수

반응형





#define INT_SLICE                 (sizeof(unsigned int)*8)
#define MAX_ID                    4095
#define ID_POOL_INT_SLICE_SIZE    ((MAX_OAM_ID+1)/INT_SLICE)

#define RET_OK                    1
#define RET_NOK                   0

unsigned int id_pool_table[ID_POOL_INT_SLICE_SIZE];

int alloc_id(unsigned int *new_id)
{
    register int ii, jj; 

    for(ii = 0; ii < ID_POOL_INT_SLICE_SIZE; ii++)
    {   
        if(~id_pool_table[ii])
        {   
            for(jj = 0; jj < INT_SLICE; jj++)
            {   
                if(!(id_pool_table[ii] & (0x80000000 >> jj)))
                {   
                    id_pool_table[ii] |= 0x80000000 >> jj; 
                    *new_id = ii*INT_SLICE + jj; 
                    return(RET_OK);
                }   
            }   
        }   
    }   

    return(RET_NOK);
}


int dealloc_id(unsigned int id) 
{
    id_pool_table[id/INT_SLICE] &= ~(0x80000000 >> (id % INT_SLICE));
    return RET_OK;
}








0 부터 MAX ID, 여기서는 4095 까지의 처음부터 순차적으로 LOOKUP해서 빈 슬롯을 찾아 할당합니다.
빠른 속도를 위해 register와 bit 연산으로 구혀되었습니다.
종종 쓰일지도...






반응형