2013-03-14 1 views
0

필자는 파일을로드하는 프로그램을 작성했으며 다른 파일을로드하는 이유에 대해 설명 할 수 있는지 궁금합니다. & 후속 작업은 동일한 파일의 초기로드보다 빠릅니까?
예 :
1. 처음으로 큰 파일 (500MB)을로드하는 경우 이후에 동일한 파일을로드하는 것보다 시간이 오래 걸립니다. 파일을로드하는 데 단지 2 분의 2 시간 밖에 걸리지 않습니다. 2 nd 시간.
RAM 사용량이 중간에 떨어지는 경우에도 마찬가지입니다 (프로그램을 다시 시작할 때이 동작이 나타남).

2. PC를 재부팅하거나 잠시 후 프로그램을 실행하지 않거나 파일을 다시로드하지 않으면 상황 1이 다시 발생합니다.메모리 및 파일 로딩 C++?

환경 :

  • C++
  • VS 2010 (MFC)
  • 윈도우 XP 홈 32 비트
  • 파일로드 : 내가 해봤 FREAD() & 다른,하지만 그들은 모두 결국 비슷한 결과가 나온다.

어떤 통찰력에도 감사드립니다.

+0

귀하의 문제의 원인이 분명하지만 확실하지 않습니다. 또한 "주제에서 벗어난"_ 및 _ "질문이 아닙니다"로 마감되었습니다. 오, 물음표가 없다는 것이 관련 있다고 생각합니다. –

+0

예 & 지구가 상승하고 세트하지만 사람들은 여전히 ​​일몰과 일출을 말합니다. 명백 할 수도 있지만 다른 사람들에게는 그렇지 않을 수도 있습니다. 어리석은 질문 인 하하 같은 것은 없습니다. 어쨌든, 답변 해 주신 분들께 감사드립니다. 건배 :) – ReturnVoid

+0

네, 대답은 분명하다고 말하려는 것이 아니 었습니다. 그러나 그것은 분명합니다. 나는 아마 그것이 어떤 사람들에 의해 "너무 명백한"것으로 간주되었다고 생각하고 있었습니까? 아마도? (물음표를 질문에 편집하십시오.) (또한 지구는 올라가지도 설정도 안됩니다.) –

답변

5

운영 체제는 사용하지 않는 메모리에 파일을 캐시합니다. wikipedia을 참조하십시오. 다시 부팅하거나 메모리를 많이 사용하거나 더 많은 파일을 열면 사라집니다. 세부 사항은 운영 체제에 따라 다릅니다.

현대 컴퓨터 아키텍처에 대한 더 포괄적 인 개요를 보려면의 Herb Sutter가 좋습니다.

+0

이런 생각이 들었을 지 모릅니다. 링크도 주셔서 감사합니다. 파일을로드하기 전에 파일을 캐시하는 방법이 있습니까? 아니면 파일로드 속도를 높이려면 비슷한 방법이 있습니까? – ReturnVoid

+0

페이지 크기만큼 간격을두고 검색하고 읽음으로써 속일 수 있지만 사용하기 전에 운영 체제가 캐시하지 않거나 쫓아 낼지 결정할 수 있습니다. 리눅스에서 가장 좋은 방법은 아마 RAM 디스크를 만들고 그 안에 파일을 복사하는 것입니다. –

+0

확실히, 필자는 캐시에 파일을로드 할 때 파일을로드하는 데 걸리는 시간을 추가해야합니다.이를 사라지게 할 수는 없습니다. 파일을 비동기 적으로로드하여 대기 시간을 숨길 수 있습니다 그래도 다른 것들. (또 다른 질문입니다 :)) –

1

하나의 가능한 설명은 하드 드라이브에 캐시가있을 수 있다는 것입니다. 처음으로 파일을 읽을 때 바로 플래터에서 읽습니다. 다음에 드라이브는 캐시에서이를 제공 할 수 있습니다. 지연 (또는 재부팅) 후 파일의 내용은 더 이상 캐시에 저장되지 않으므로 플래터에서 다시 제공됩니다.

+3

일반적인 하드 디스크의 캐시는 약 32MB (SSD의 경우 더 많음)입니다. 이것은 확실히 중요합니다. 두 번째로드에서도 캐시가 맞지 않을 수도 있습니다. OS에 의해 RAM에 캐시 될 가능성이 있습니다. –

+1

좋은 지적. 당신의 대답에 +1하십시오. –

0

대부분의 하드 드라이브에는 최근에 캐시가 있으므로 한 번로드하면 캐시에 저장됩니다. 아마도 파일을 두 번 이상로드하고 싶지 않을 것입니다!

+0

아마도 이러한 절약 효과를주는 하드 드라이브 캐시는 아닙니다. –

1

최신 운영 체제에서는 "사용되지 않은 메모리"와 같은 것이 없습니다. 그것은 총 낭비 일 것입니다. OS가 수행하는 작업은 파일, 디렉토리 구조, 파일 메타 데이터 [디스크의 어디에 특정 파일의 데이터가 있는지] 및 "사용되지 않은"메모리에있는 다른 유용한 데이터를 유지한다는 것입니다.

그래서 파일을 읽을 때 메모리에로드됩니다. 충분한 "사용되지 않은"메모리가 있다고 가정하면, 그 파일은 오랫동안 거기에 실제로 앉아있을 것입니다. 결국 컴퓨터, 전자 메일 소프트웨어, 웹 브라우저, 파일 컨텐트 인덱서, 안티 바이러스 스캐너, 네트워크 시간 동기화 장치, 휴대폰 동기화 장치의 주소록 및 기타 모든 배경 코드를 정상적으로 사용하기 때문에 결국에는 쫓겨날 것입니다. 여러분의 시스템에서 실행되는 모든 것들은 약간의 "사용되지 않은"메모리를 사용할 것입니다.

그래, 파일이 캐시됩니다. 4 또는 8GB의 RAM을 가지고 있고 그 RAM을 모두 사용하지 않는 시스템의 500MB 파일은 수분, 수 시간 또는 며칠 동안 잠재적으로 거기에 앉아있을 것입니다.