我的程序將獲取當前來自將使用二進制模式istream讀取的文件的字節流。爲了使用這些數據,我需要在程序的後面使用各個位。目前有三件事我不確定,從文件中讀取信息,處理它並將其存儲以備後用。處理是我最不確定的部分,另外兩個是小問題。將字節流分成C++中的位
對於接收數據,目前正在使用二進制istream是否有更快的方法來接收數據?爲了存儲數據,我將使用一個bool向量,因爲在編譯時不會知道大小,它可以擴展到幾MB的數據,有沒有更好的方法來存儲數據?如果這對存儲很重要,那麼在需要位之前會有另一個可能使用相對大量內存的進程。
最後一個問題,和一個令我最怕麻煩,就是如何把字節分成位,因爲這將是具有大量數據的,我想這是儘可能高效循環。第一個想法和我目前喜歡的想法是,使用按位&來檢查該位是否已設置,然後進行比較以設置布爾值;
bitbool = (byte&128) != 0
下一個方法是右移,然後左移留下最顯著位,然後轉移到留下兩個最顯著並使用以前的一個隔離的第二個最顯著,但我認爲這將比以前的方法效率更低。
最後的方法是使用一個八位寬的位來轉換字節,然後讀出位並設置布爾值。我不確定bitsets,因爲我之前沒有使用它們,儘管在我的研究之後似乎可以將它們用於此目的,但我不確定它的效率如何。
你真的需要在執行過程中減少微秒嗎?如果是這樣,您可以使用編譯器選項來發出彙編代碼,並比較每個變體的生成情況。或者編寫兩個選項並計時。 CPU緩存未命中可能會嚴重降低本來是最佳代碼的執行速度。 – Jay 2014-09-03 15:54:26