有没有办法检查指针的bool**指针是否包含C中没有循环的真值?

Tho*_*Haz 3 c optimization pointers ios

我正在尝试优化iOS应用程序,只是想就我遇到的问题提出一些建议.

我有一个bool**可以容纳1024*1024元素.每个元素都默认为,false但也可以随意更改true.

我想知道是否有一种简化的方法来检查true任何元素是否包含一个值,因为在最坏的情况下,使用两个循环进行检查需要超过一百万次迭代.

我可能完全错了,但我曾考虑将内存转换为int,相信当一个false值等于0时,如果所有元素都是false,那么将它转换为int的结果,我曾经想过,然后是0.但事实并非如此.

我可能需要考虑的是在切换时保持真实值的数量,但这可能会很快变得非常混乱.

我希望我在没有代码的情况下做得很清楚,但如果你需要查看任何代码,请问.

- 编辑 - 所以我决定采用mvp的答案.然后,当我需要检查是否设置了某个位时:

uint32_t mask32_t[] = {
    0x01, 0x02, 0x04, 0x08,
    0x10, 0x20, 0x40, 0x80,
    0x100, 0x200, 0x400, 0x800,
    0x1000, 0x2000, 0x4000, 0x8000,
    0x10000, 0x20000, 0x40000, 0x80000,
    0x100000, 0x200000, 0x400000, 0x800000,
    0x1000000, 0x2000000, 0x4000000, 0x8000000,
    0x10000000, 0x20000000, 0x40000000, 0x80000000
};

bool bitIsSet(uint32_t word, int n) {
    return ( word & mask32_t[ n ] ) != 0x00;
}

bool isSetAtPoint( uint32_t** arr, int x, int y ) {
    return bitIsSet( arr[ (int)floor(x / 32.0) ] [ y ], x % 32 );
}
Run Code Online (Sandbox Code Playgroud)

mvp*_*mvp 6

您可以做的最佳优化可能是将1024x1024布尔数组转换为位数组.这种方法有一些好处和缺点:

  1. + 位阵列将消耗8倍的内存:1024*1024/8 = 128KB.
  2. +您可以通过快速检查32位整数来快速测试多个位.换句话说,找到第一个非零位可以快32倍.
  3. -您需要创建自定义例程来读取和写入此数组中的位.但是,这是一个相当简单的任务 - 只是有点笨拙:).