2011-03-29 16 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

相關問題