我想知道从性能的角度来看,我可以使用什么标准容器作为char board[8][8]
的替代方案。需要经常访问该板以进行读写。在算法期间可能会构建多达100万个新板。每个元素只允许三个可能的值:-1,0,1,因此板的有用位总数实际上是128.我想到了围绕std :: bitset< 128>构建的自定义类型。使用所有必需的(内联)运算符[],==,=等定义为访问它作为2d数组,但我不确定与原始char [8] [8]相比,这会加快访问速度。我也不关心内存使用量的增加,这不是问题。
答案 0 :(得分:4)
我会使用std::array<signed char, 64>
并将其作为a[8 * i + j]
*进行访问。没有必要进入子字节粒度,因为无论如何这些64B可能都在同一个缓存行中,你可以快速访问。您甚至可以尝试使用int
数组进行比较;可能是字大小的访问速度更快。只有剖析可以说明。
*)或者甚至std::array<std::array<char>, 8>, 8>
,正确评论。同样的,基本上,虽然可能更容易使用。
答案 1 :(得分:1)
如果您不关心内存使用情况,请勿使用bitset 。实际上,最快的解决方案可能是最容易用于硬件的解决方案。
你必须要进行分析,但我怀疑使用单词大小的1d数组会是最快的:
long board[64];
显然,board[x][y]
变为board[x * 8 + y]
;
如果您希望可以为此创建C ++类接口,请确保内联函数。
记住,永远简介! signed char
有可能比long
更快,具体取决于编译器和体系结构。