我有一个位图,用于跟踪共享内存的某些静态/固定块是空闲还是已分配。
我的共享内存中有4096个块,因此我使用大小为(4096 / sizeof(uint32))的无符号整数数组,即uint32位图[128];
我通过设置0到4095之间的数字并以大端序方式进行相应的位图操作来设置和取消设置位图数组。
我需要实现一个将遍历此位图数组并返回第一个空闲块的函数。这是我当前的实现。
#define TOTAL_PAGES 4096
#define UINT_SIZE 32
uint32_t bitmap_get_free(uint32_t bm[])
{
uint32_t i, free_bit;
for (i = 0; i < TOTAL_PAGES/UINT_SIZE; i++) {
if(bm[i] < UINT32_MAX) {
free_bit = __builtin_clz(~(bm[i]));
return (i * UINT_SIZE) + free_bit;
}
}
return -1;
}
是否有更好或更有效的方法?