fread 최적화
글쓴이: mr.lee / 작성시간: 월, 2006/05/01 - 5:06오후
아시다시피 fread의 prototype은 다음과 같습니다.
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
여기서 수메가~수십메가의 큰 텍스트파일을 읽는다고 가정하였을때 size와 nmemb 등의 인자값을 어떻게 하는것이 가장 효율이 좋을까요?
음..크게 봐서는 두가지가 있을듯 한데요.
1. 파일크기를 읽어와서 전체크기만큼 메모리를 준비해둔 다음 size=전체크기, nmemb=1 로 하여 읽는다.
이럴경우 커널단에서 알아서 여러번 나누어서 읽어가겠지요.
2. size='적당한크기', nmemb=전체크기 / size + 1
이럴경우 적당한크기는 어느정도로?
음. 그냥 첫번째 방법으로 하면 각 커널구현마다 알아서 나눠 읽으므로 가장 무난한 방법이 아닐까 생각은 듭니다만..
Forums:
어차피, 파일 내용
어차피, 파일 내용 전체를 메모리에 올려 놓는 것이 목적이라면, 1, 2번 큰 차이가 없을 겁니다. 엄청나게 큰 파일이라면 부분적으로 읽어 와서 작업하는 것이 더 효과적일 듯 하군요. 전체를 다 읽어와야 한다면, 1번 형식으로 하는 것이, fread()가 효과적으로 읽을 수 있을 여지를 줄 수 있을 것 같군요. 하지만, 이는 표준 라이브러리가 어떤 식으로 구현되어 있는가에 따라 달라질 수 있는 내용이기 때문에, 정답이 있을 수 없습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기