2011-03-29 46 views
0

我得到了一些我想要改进的代码。这是一个简单的应用程序的2DBPP的变化之一,你可以看看在https://gist.github.com/892951如何在C++程序中使用位值而不是字符?

来源看这里是我使用字符(我想切换到二进制值,而不是)的东西大纲。

... 
char* bin; 
bin = new (nothrow) char[area]; 
memset(bin, '\0', area); 

有时我检查特定值::

if (!bin[j*height+k]) {...} 

或块:

if (memchr(bin+i*height+pos.y, '\1', pos.height)) {...} 
012的存储器与“0'()的块个

或设定值“1':

memset(bin+i*height+best.y,'\1',best.height); 

我不知道任何非标准类型或方法的二进制值工作。我怎样才能使用位而不是字节?

有一个相关的问题,你可能会感兴趣的 - C++ performance: checking a block of memory for having specific values in specific cells

谢谢!

编辑:还有一个更大的问题 - 这是一个改进?我只关心时间。

+0

'C++ bit vector'获得大量Google点击。 – geekosaur 2011-03-29 19:32:58

+0

呃...你有没有使用“C++按位操作”? – 2011-03-29 20:08:22

+0

我有。我想我正在寻找的是memset和memchr的位......我也看过这个矢量,但是我的头也不能包住它。会再来一次。 – 2011-03-29 21:34:12

回答

0

我推荐阅读boostdynamic_bitset,这是一个运行时大小的版本std::bitset

或者,如果您因某种原因不想使用boost,请考虑使用std::vector<bool>。引用cppreference.com:

请注意,布尔向量(std::vector<bool>)是专门用于使用较少内存的向量模板。正常的布尔变量通常使用1-4个字节的内存,但布尔向量每布尔值只使用一个位。

0

除非内存空间有问题,否则我会远离位置。您可以节省一些内存空间,但可以延长性能。打包和解包位需要时间和额外的代码。

在试图找位代码之前,让代码更加健壮和正确。使用不同的(高级别)设计来提高性能和内存使用率。

如果你要进入位级,研究布尔算术和逻辑。重新设计您的数据以便在比特级更易于操作。

+0

我不关心记忆。只有时间。我想我需要把一些基准放在一起,看看比特是否给我比字节更好的时间。 – 2011-03-29 20:14:50

相关问题