我正在编写一个简单的flash文件系统,我需要在flash设备中为每个页面存储三种状态之一:
FREE
INVALID (ready to be freed)
VALID
如果它只是两个可能的状态,我肯定会使用位图(内存是一个问题).但在这种情况下,保持这些价值的最紧凑方式是什么?
我唯一能想到的是将四个2位值打包到一个char中,并使用位掩码对每个值进行操作.
例如(写得很快,所以不能保证它完美地运行):
#define FREE 0x0 // 0b00
#define INVALID 0x1 // 0b01
#define VALID 0x2 // 0b10
char state[NUM_ITEMS/4];
void set_state(int item_num, int state) {
int idx;
char tmp;
idx = item_num / 4;
tmp = state[idx];
tmp &= ~(0x3 << (item_num % 4));
tmp |= (state << (item_num % 4));
state[idx] = tmp;
}
int main(void) {
//...
set_state(6, INVALID);
//...
return 0;
}
还有其他我不知道的选择吗?
最佳答案 基地3
0, 1, 2
10, 11, 12, /* 3, 4, 5 in base 10 */
20, 21, 22 /* 6, 7, 8 */
100, 101, 102 /* 9, 10, 11 */
...