다음 상황에있는 C/C++ 혼합 프로젝트에서 작업하고 있습니다.응용 프로그램 계층 미리 가져 오기 시스템을 작성하는 방법
파일 하나 하나에 아주 작은 덩어리 (드물게 큰 덩어리도)를 통과하려면 반복이 필요합니다. 이상적으로, 나는 한 번 연속적으로 읽어야한다. 이 경우에는 버퍼에 큰 덩어리를 읽고 나중에 필요할 때 즉시 읽을 필요없이 나중에 소비하는 것이 더 나은 솔루션이라고 생각합니다.
문제는 캐시 크기의 균형을 조정하는 방법입니다. 내가 잘 활용할 수있는 잘 알려진 알고리즘/라이브러리가 있습니까?
업데이트 : 너희들 '답변에 대한
감사합니다 (제목 변경)와 나는 우리 상자에서 작업 캐싱 메커니즘의 다른 수준이 있습니다 이해합니다. 하지만 제 경우에는 충분하지 않습니다.
나는 여기서 중요한 무엇인가 놓쳤다 고 생각합니다. 사실 저는 엔진에 대한 읽기 요청이 너무 비싸서 기존 프레임 워크에 응용 프로그램을 구축하고 있습니다. (네, 엔진이 OS와 디스크 레벨 캐시를 이용한다고 믿습니다.) 그리고 제가하려는 것은 실제로 애플리케이션 레벨 프리 페칭 시스템을 만드는 것입니다.
생각하십니까?
여기저기서 계속해서 읽지 않는 한 걱정할 가치가없는 것 같습니다. 디스크는 많은 양의 데이터를 캐시 할 수 있습니다. 나는 일반적으로 최대 64 MB를 생각하며 캐시에 요청한 것보다 더 많이 끌어 당깁니다. 그건 그렇고, 나는 섹터 분의 데이터 (아마 2 또는 4 KB)를 가져올 것을 제안 할 것이다. –
최신 OS는 64MB가 아닌 모든 여유 메모리를 디스크 캐시로 사용합니다. – BatchyX
아마 '디스크 버퍼'라고 말 했어야했는데, 드라이브에 내장 된 하드웨어를 언급하고있었습니다. –