반응형

2017/07/27 3

RAW 입출력과 표준 입출력의 성능 비교

앞에서 표준 입출력에서는 버퍼링 정책(FULL BUFFERING, LINE BUFFERING, NULL BUFFERING)을 사용한다는 것을 알아보았어요. 이번에는 간단하게 open, write, close 시스템 호출을 이용한 RAW 입출력과 표준 입출력의 성능을 비교해 보기로 할게요. 다음은 1바이트씩 10000번 파일에 기록하는 것을 RAW 입출력과 표준 입출력을 사용하는 것을 비교하는 소스 코드입니다. 표준 입출력을 사용하는 것은 0부터 8000까지 500씩 늘려가면서 버퍼를 설정하고 있어요.

표준 입출력 - FILE 구조체

표준 입출력 함수에서는 작업할 파일에 관한 정보를 FILE 구조체 형식으로 기억합니다. FILE 구조체는 C 컴파일러에 따라 조금씩 차이가 있지만 파일 기술자, 버퍼 시작 주소, 버퍼에서 입출력할 위치 주소, 작업 관련 플래그 등을 제공합니다. struct _IO_FILE{ int _fileno; //파일 기술자 char *_IO_read_ptr; //읽기 버퍼에서 현재 읽을 위치 주소 char *_IO_read_base; //읽기 버퍼의 시작 주소 char *_IO_read_end; //읽기 버퍼에 처리할 데이터가 있는 영역의 끝 주소 char *_IO_write_ptr; //쓰기 버퍼에서 현재 기록할 위치 주소 char *_IO_ write _base; //쓰기 버퍼의 시작 주소 int _flags;..

표준 입출력 - 버퍼 및 버퍼링 정책 설정

C언어 표준 라이브러리에서 제공하는 입출력 함수들은 평균적으로 성능이 높게 입출력할 수 있게 고안하여 입출력 시스템 호출에 관해 깊은 지식과 경험이 없는 이들도 충분히 높은 성능을 갖게 프로그래밍할 수 있습니다. 물론 C언어 표준 입출력 라이브러리에서는 개발자가 버퍼링 정책을 변경하거나 버퍼를 설정하는 몇 가지 함수를 제공하고 있습니다. /*********************************************************************** * ex_change_buffering.c * * example source – print string(print character and sleep) * ************************************************..

반응형