C언어

mmap 주의점

고요한하늘... 2014. 11. 27. 17:46

mmap을 사용한다고 해서

파일의 내용이 모두 메모리에 올라가는 것은 아니다.

해당 내용을 읽었을때만 메모리에 적재된다.( 데이터 메모리 적재를 위해서는 메핑된 메모리 영역에 접근해봐야 한다. 이런 접근은 페이지 단위로 실행해서 모든 페이지를 순회하면 모든 페이지가 적재된다. 물론 메모리가 충분할때 )


MAP_PRIVATE , MAP_SHARED 둘중 어떤 옵션을 사용한다고 해도 READ onLY 상황에서는 차이가 없다.

MAP_SHARED는 write시에 다른 프로세스에 변경된 내용을 반영해주는 정도의 차이가 있다.

이름에서 오는 인식의 오해가 발생할수 있다.

MAP_PRIVATE에서 PRIVATE라는 의미는 mmaping된 내용을 나만 사용한다는 뜻이 아니라 수정이 발생했을때 private 공간을 만들어서 적용하기 때문에

다른 프로세스에 반영되지 않는다는 의미이다.

* READ onLY 상황에서는 MAP_PRIVATE == MAP_SHARED라고 볼수 있다.


#include <sys/mman.h>

int madvise( void *addr, size_t len, int advice );


커널에 메모리 사용에 대한 힌트를 전달한다.

MADV_RANDOM : page 접근이 랜덤일 것이다.

커널에서 미리 읽기를 OFF 시킨다.

실행시에 필요한 데이터만 로딩


MADV_SEQUENTIAL : MADV_RANDOM 와 정확하게 반대로 동작한다.

page가 연속적으로 읽힐것이라는 힌트를 주고

커널에서 미리읽기를 on 시킨다.


참고 : http://www.nxmnpg.com/ko/2/madvise


'C언어' 카테고리의 다른 글

apr time stamp  (0) 2015.01.30
LCS(Longest common subsequence) example code   (0) 2014.12.02
large file or large memory  (0) 2014.11.24
mmap 삽질  (0) 2014.11.14
sort backslash  (0) 2014.08.19