2012-02-09 2 views
1

현재 내 프로젝트 중 하나에서 압축을 위해 zlib을 사용하려고합니다. 나는 기본 zlib tutorial를 살펴했고 나는 다음과 같은 진술에 의해 혼란 스러워요 :zlib 및 버퍼 크기

CHUNK는 단순히 ZLIB 루틴의 데이터 을에 데이터를 공급하고 당기에 대한 버퍼 크기입니다. 특히 inflate()의 경우 버퍼 크기를 늘리면 더 효율적입니다 ( ). 메모리를 사용할 수있는 경우 버퍼 크기는 입니다. 128K 또는 256K 바이트의 순서를 사용해야합니다.

#DEFINE 청크 난 항상 (80 바이트 정도) 출력 끝에 이미 작은 버퍼를해야합니다 지속적으로 입력에서 매우 작은 데이터 (몇 바이트)를 공급한다 나의 경우 16384

측면을 통해 zlib. 이것은 어느 쪽에서도 더 큰 버퍼를 사용하지 않을 것이라는 것을 의미하지만 더 작은 버퍼를 사용할 계획입니다.

그러나 "더 큰 버퍼 크기가 더 효율적"이라고 해석하는 방법을 잘 모르겠습니다. 이것은 인코딩 또는 시간/공간 효율성의 효율성을 말하는 것입니까?

하나의 아이디어이 상황을 해결하려면 입력에서 축적되어 출력에 반복적으로 플러시되는 버퍼링 레이어를 추가해야합니다. 그러나 이것은 데이터를 축적해야하고 내 데이터에 더 많은 수준의 복사를 추가해야한다는 것을 의미합니다. 이는 성능을 해칠 수도 있습니다.

효율이 단지 시간/공간 효율성을 나타낼 뿐인 경우 두 가지 방법의 영향을 측정하고 사용할 수 있도록 결정할 수 있습니다. 그러나 실제 인코딩이 작은 버퍼 크기의 영향을받을 수있는 경우이를 감지하기가 어려울 수 있습니다.

아주 작은 버퍼를 가진 zlib 사용 경험이있는 사람이 있습니까?

답변

5

시간 효율성을 의미합니다. 큰 입출력 버퍼를 부 풀리면 내부적으로 빠른 인플레이션 코드를 사용하게됩니다. 원하는만큼 작은 버퍼 (크기 1조차도)로 잘 작동하지만 느려질 것입니다.

입력을 축적하여 더 큰 청크로 팽창시키는 것이 좋습니다. 더 큰 출력 버퍼를 제공해야합니다.