访问C中二维位数组中特定位的最快方法?

时间:2014-11-20 02:14:59

标签: c arrays performance

我正在使用有限的内存并需要快速访问数组char [80] [10]中的单个位,这实际上为我提供了一个80x80阵列,每个索引只是一个位。

这就是我目前设置,清除和检查各个位的方式:

s[(row)][(col) >> 3] |= (0x80 >> ((col) & 0x07)); //set bit at s[row][col]
s[(row)][(col) >> 3] &= ~(0x80 >> ((col) & 0x07)); //clear bit at s[row][col]
int bit = (s[row][(col) >> 3] & (0x80 >> ((col) & 0x07)) ? 1 : 0); // read bit at s[row][col] into int bit

是否有一些简化使这些表现更快?

谢谢!

2 个答案:

答案 0 :(得分:3)

s[row][col]  |=  (1 << bit);     // set bit
s[row][col]  &= ~(1 << bit);     // clear bit
(s[row][col] &   (1 << bit))!=0  // read bit

就C而言,这是最快的。进一步优化将依赖于特定于系统的事情,并且必须由编译器完成。

答案 1 :(得分:0)

作为单一操作,你无法做得更好。但是在更大的算法中,您可以通过使用一致性来分解部分寻址。

也就是说,对于二维阵列[M] [N],访问元素[i] [j]与访问等效的一维阵列的[i * N + j]相同。这是一个乘法,如果它变化较少,可以从内循环中考虑。