IT Tech/Programming
[C언어] Fast Integer ID Pool 관리 - 할당/반환 함수
MindEater™
2011. 12. 19. 20:54
반응형
#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 연산으로 구혀되었습니다.
종종 쓰일지도...
빠른 속도를 위해 register와 bit 연산으로 구혀되었습니다.
종종 쓰일지도...
반응형