fread / fwrite를위한 최적의 버퍼 크기 [닫힘]


10

POSIX fread / fwrite 기능을 통해 읽기 / 쓰기 파일에 어떤 버퍼 크기를 선택해야합니까?

c 

이 질문은 너무 현지화되었습니다. 현재 코딩중인 특정 프로그램에만 적용됩니다.
— 세계 엔지니어

나는 일반적인 경우를 의미합니다. 많은 프로그램이 알 수없는 크기 (예 : grep, cp)로 전체 파일을 읽거나 써야합니다.

POSIX read/ write기능 또는 ANSI / ISO / IEC fread/ fwrite기능을 의미합니까?
— Jan Hudec

답변:


6

ANSI / ISO fread/fwrite기능이 버퍼링됩니다. 버퍼는 일반적으로 8 KiB이며 코드에서 사용하는 것과 독립적으로 세분성을 제공합니다. 버퍼를 조금 높이면 아마도 아래 값으로 늘리는 것이 좋습니다. 대량 전송의 경우 추가 사본으로 인해 항상 조금 느려집니다.

POSIX read/write기능의 경우 운영 체제 및 장치 및 기타 여러 가지 사항에 따라 다르지만 실제 경험은 수십 KiB를 초과하여 버퍼를 늘려서 성능을 향상시키지 못하므로 32 또는 64 KiB가 적절하다는 것입니다.

일부 시스템에서는 종속성이 다른 시스템보다 큽니다. Linux에서는 차이가 일반적으로 8 KiB 이상으로 최소화되므로 기본 버퍼가 적합합니다. 예를 들어 Windows CE (기본 API 사용, POSIX가 없음)는 64 KiB보다 큰 경우에도 여전히 도움이됩니다. 장치에 따라 다를 수도 있습니다.


버퍼링 된 I / O (즉 fread, fwrite)의 경우 8k, 버퍼링 되지 않은 경우 32 / 64K? 이미지 데이터를 전송하는 경우 버퍼링 또는 버퍼링 해제를 선택해야하는 특정 근거가 있습니까?
— Francesco Boi

1
@FrancescoBoi, 8k는 변경할 수있는 버퍼링 된 경우에만 기본값입니다. 버퍼링의 요점은 한 번에 몇 바이트를 처리 할 때 모든 컨텍스트 전환을 피하는 것입니다. 이미지의 경우 일반적으로 이미지가 필요하거나 모두 가지고 있으며 약간의 처리를 생략하므로 버퍼링되지 않는 것이 좋습니다.
— Jan Hudec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.