|
지난번 대용량 파일 로딩관련해서 파일의 데이터를 메모리에 다 올리지 말고... 파일 자체를 배열처럼 이용해서 사용하라고 답변 주셨었는데요...
CreateFileMapping()함수를 이용한 데이터 액세스는 잘 됩니다.
음.. 지금 제가 만들고 있는 프로그램은 파일의 데이터를 모두 사용을 합니다.
지금 파일의 데이터는 데이터 한다발(1750개의 unsigned char 데이터)이 가로 500개, 세로 500개가 있습니다.
계산을 해보면 파일의 데이터 크기는 500*500*sizeof(unsigend char)*1750 = 417.2M가 나옵니다.
이렇게 큰 데이터를 모두 액세스 하여 나온 가공데이터는 500*500 = 0.23M 입니다.
그런데... CreateFileMapping()로 파일의 모든 데이터(1750개로 구성된 500*500개 데이터 다발)를 액세스 하니.. 파일 사이즈만큼의 메모리가 프로그램에 적재되는거 같더라구여..
파일 로딩전 프로그램 크기 : 35M
파일 로딩후 프로그램 크기 : 450M 정도
파일 로딩된것을 닫아 버리면 450M 정도의 메모리가 다시 풀립니다.
메모리 할당을 하지 않고 파일의 데이터만을 액세스 하는것이기 때문에 추가로 메모리가 잡히지 않아야 하는게 아닌가 생각이 듭니다.
아님.. CreateFileMapping()가 파일의 데이터를 액세스 할때마다 내부적으로 파일의 데이터를 프로그램 메모리에 적재시키는 걸까요?
메모리에 적재하지 않고 파일의 데이터를 액세스 할 수 있다면 메모리 낭비 없이 참 좋을거 같은데요...
어떻게 하면 좋을까요?
|