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)
您可以做的最佳优化可能是将1024x1024布尔数组转换为位数组.这种方法有一些好处和缺点:
+ 位阵列将消耗8倍的内存:1024*1024/8 = 128KB.+您可以通过快速检查32位整数来快速测试多个位.换句话说,找到第一个非零位可以快32倍.-您需要创建自定义例程来读取和写入此数组中的位.但是,这是一个相当简单的任务 - 只是有点笨拙:).| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |