본문 바로가기

IT Tech/Programming

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

반응형





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#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 연산으로 구혀되었습니다.
종종 쓰일지도...






반응형