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.