2010-02-15 4 views
2

C++ 질문.std :: istream :: 효율을 얻으십시오

for(i=1;i<10000;i++){ 
    cout << myfile.get(); 
} 

프로그램은 HDD의 파일에 대해 10000 IO 작업을 수행합니까? (주어진 파일이 더 큼) 만약 그렇다면, 어쩌면 그것은 512 바이트를 몇 개의 버퍼에 말한 다음 거기에서 char에 의해 char을 가져 와서 다시 512 바이트를 복사하는 등의 방법을 사용하는 것이 더 낫습니다.

답변

1

OS가 파일을 캐시하므로 일반적인 용도로이 파일을 최적화 할 필요가 없습니다.

1

ifstream은 버퍼링됩니다.

+1

10000 IO 요청을하지는 않지만 한 번의 호출로 10KB를 읽는 것보다 느리게 처리됩니다. – jalf

1

사용해보기.

그러나 대부분의 경우 가장 빠른 작업은 전체 파일을 한 번에 읽은 다음 메모리 내 데이터에서 작업하는 것입니다.

하지만 실제로는 각 전략을 시험해보고 무엇이 가장 잘 작동하는지 확인하십시오.

기본 파일 버퍼링 메커니즘에 관계없이 한 번에 한 바이트 씩 읽는 것이 입니다. 그 밖의 것이 없다면, 꽤 느린 IOStreams 라이브러리를 10000 번 호출합니다. 단 몇 번의 호출 만하면됩니다.

2

다른 사람들이 말했듯이 - 시도해보십시오. 내가 한 테스트에서는 한 번에 큰 블록을 읽는 것 (스트림 사용)이 스트림의 자체 버퍼링에만 의존하는 것보다 최대 두 배 빠름을 보여줍니다. 그러나, 이것은 버퍼 크기와 같은 것들에 의존하고 (나는 기대할 것이다) 스트림 라이브러리 구현 - 나는 g ++를 사용한다.

관련 문제