내 프로그램이 바이너리 모드 istream을 사용하여 읽을 파일에서 현재 바이트 스트림을 가져 오려고합니다. 데이터를 사용하려면 나중에 프로그램에서 개별 비트를 사용해야합니다. 현재 내가 확신 할 수없는 세 가지가 있습니다. 파일에서 정보를 읽은 다음 처리하고 나중에 저장합니다. 처리는 내가 가장 확신 할 수없는 부분이며, 나머지 두 가지는 부 조회입니다.바이트의 스트림을 C++의 비트로 나누기
바이너리 istream이 현재 사용중인 데이터를 수신하는 데 데이터를받는 더 빠른 방법이 있습니까? 데이터를 저장하기 위해 크기가 컴파일 타임에 알려지지 않을 것이고 최대 2MB의 데이터까지 확장 할 수있는 bool 벡터를 사용하려고 했으므로 데이터를 저장하는 더 좋은 방법이 있습니까? 이 문제가 스토리지에 중요한 경우 비트가 필요하기 전에 비교적 많은 양의 메모리를 사용할 수있는 또 다른 프로세스가있을 것입니다.
마지막 문제는 가장 귀찮은 원인으로, 바이트를 비트로 분할하는 방법입니다.이 방법은 많은 양의 데이터를 루프에 넣기 때문에 가능한 한 효율적 이길 원합니다. 첫 번째 아이디어와 현재 내가 선호하는 아이디어는 bitwise &을 사용하여 비트가 설정되어 있는지 확인한 다음 bool을 설정하는 것입니다.
bitbool = (byte&128) != 0
다음 방법 그러나 나는이 생각하고, 최상위 비트를 남겨 두 개의 가장 중요한을 떠나 이동하고 두 번째 가장 중요한을 분리 이전을 사용하는 오른쪽 시프트 및 다음 왼쪽 시프트이다 이전 방법보다 효율성이 떨어집니다.
마지막 방법은 8 개의 와이드 비트셋을 사용하여 바이트를 변환 한 다음 비트를 읽고 bool을 설정하는 것입니다. 나는 비트 맵을 사용하지 않았기 때문에 비트 세트에 대해서는 확신하지 못한다. 비록 나의 연구가이 목적을 위해 그것들을 사용하는 것이 가능할 지 모르지만 나는 그것이 얼마나 효율적인지 확신하지 못한다.
실행 중에 마이크로 세컨드를 면도해야합니까? 그렇다면 컴파일러 옵션을 사용하여 어셈블리 코드를 내보내고 각 변형에 대해 생성 된 내용을 비교할 수 있습니다. 또는 두 옵션을 모두 작성하고 시간을 측정하십시오. CPU 캐시 미스는 최적의 코드가 될 수있는 실행을 심각하게 늦출 수 있습니다. – Jay