문제

이진 파일을 RAM으로 직접 읽는 방법이 있습니까?

내 말은, 컴파일러를 알리는 방법이 있습니까? 여기 파일이 있습니다. 여기 RAM 블록이 있습니다. 파일 내용을 RAM에 넣으십시오.

현재 IFStream이 64 비트 블록으로 RAM (배열) 64 비트 블록에로드하는 파일을 통해 파일을 밟고 있습니다. 그러나 나는 이것이 컵을 집어 들지 않고 컵 (파일)에서 물 (파일)에서 물을 굽는 것 (램)에 컵 (램)에 물을 구제하기 위해 반드시 (여기에 비유가 온다)와 같이 느려질 것이라고 생각합니다. 한 번에 전체 내용물을 주전자에 팁.

이것에 대한 상대적인 신규 이민자로서 나는 이것에 대한 잘못된 아이디어를 완전히 가지고있을 수 있습니다. 모든 거점은 큰 도움이 될 것입니다.

나는 큰 파일을 RAM에 넣는 가장 빠른 방법 직후에 바로 직후에 있습니다.

감사

도움이 되었습니까?

해결책

한 패스로 파일을 읽지 못하게하는 것은 무엇입니까? 메모리에 맞지 않기에는 너무 큽니까?

매핑 된 파일, unix : mmap, windows : createefilemapping을 사용할 수도 있습니다.

다른 팁

나는 당신이 필요로하는 것이 무엇이라고 생각합니다 메모리 매핑 파일, 그러나 API는 귀하가 어떤 OS에 있는지에 따라 달라집니다. UNIX에서는 MMAP ()라고 생각합니다.

mmap 당신을 위해 일해야합니다. 대부분의 구현은 실제 메모리 페이지를 참조 할 때까지 실제로 파일을 읽지 않지만 어쨌든 파일 내용에 항상 RAM이있는 것처럼 파일 내용에 액세스 할 수 있습니다.

당신은 당신이 어떤 플랫폼에 있는지 말하지 않지만 이것은 메모리 매핑 된 파일의 작업처럼 들립니다.

귀하의 프로그램에는 가상 메모리가 제공됩니다. 일부는 RAM에 매핑되고 일부는 스왑 파일에 맵핑되며 그것에 대해 많이 할 수 없습니다. 그러나 더 큰 블록 (예 : 여러 메가 바이트) 만 복사하여 파일 시스템 인터페이스 사용 오버 헤드를 줄일 수 있습니다.

이것이 당신이 요구하는 것인지 확실하지 않지만 파일의 읽기 속도를 높이려면 더 많은 바이트를 버퍼링 할 수 있습니다. fstream의 read () 메소드의 두 번째 인수는 입력 크기를 지정하도록 설정할 수 있습니다. 예를 들어, 32k (32*(2^10)) 값을 제공하면 읽기 과정의 속도를 높일 수 있습니다. 버퍼 크기가 다른 벤치마킹을하는 것이 좋습니다.

"파일을 스왑에 넣고 항상 RAM에 넣는 것을 피하는 것을 피하십시오"라는 의미라면 OS가주의를 기울이는 것이기 때문입니다.

DirectX SDK의 내용 예제를보십시오.

파일 매핑 접근법을 사용합니다. 분명히, 그것의 Windows API를 사용하지만 다른 플랫폼의 해당 API도 찾을 수 있습니다.

흥미로운 점은 맥락에서 접근 방식을 보여준다는 것입니다. (이 경우 지형)의 일부에서 읽기/페이징도 주문형.

부스트는 무엇보다도 메모리 매핑 파일에 대한 크로스 플랫폼 지원을 제공합니다 ...

메모리 매핑 파일을 향상시킵니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top