mmap은 언제 사용하시겠습니까?
그래서 동적으로 할당된 메모리가 필요하다면 malloc()을 사용할 수 있다고 알고 있습니다.예를 들어, 프로그램에서 가변 길이 파일을 char[ ]로 읽습니다.어레이를 얼마나 크게 만들지 미리 알 수 없기 때문에 런타임에 메모리를 할당합니다.
저는 당신이 언제 mmap()을 사용하는지 이해하려고 합니다.맨 페이지를 읽어봤는데 솔직히 사용 사례가 뭔지 잘 모르겠어요.
누가 간단한 용어로 사용 사례를 설명해 줄 수 있습니까?미리 감사드립니다.
mmap
몇 가지 용도로 사용할 수 있습니다.첫째, 파일 백업 매핑입니다.메모리를 할당하는 대신malloc
그리고 파일을 읽는 것은 명시적으로 읽지 않고 전체 파일을 메모리에 매핑하는 것입니다.이제 해당 메모리 영역에서 읽거나 쓸 때 작업이 파일에 투명하게 적용됩니다.왜 이런 짓을 하고 싶으십니까?OS에서 제공하는 페이징 메커니즘을 사용하여 사용 가능한 메모리보다 큰 파일을 쉽게 처리할 수 있습니다.파일 크기가 작은 경우에도 매핑을 사용하면 메모리 복사본의 수가 줄어듭니다.
mmap
익명 매핑에도 사용할 수 있습니다.이 매핑은 파일로 지원되지 않으며 기본적으로 메모리 덩어리에 대한 요청입니다.만약 그것이 비슷한 소리라면.malloc
,맞아요.사실, 대부분의 구현은malloc
내부적으로 익명을 사용할 것입니다.mmap
넓은 메모리 영역을 제공합니다.
또 다른 일반적인 사용 사례는 공유 메모리 영역을 얻기 위해 여러 프로세스가 공유 매핑과 동일한 파일을 매핑하도록 하는 것입니다.파일을 디스크에 실제로 쓸 필요는 없습니다.shm_open
이런 일이 일어날 수 있는 편리한 방법입니다.
고정된 크기의 데이터 블록을 읽고 써야 할 때마다 mmap을 사용하여 디스크의 데이터 파일을 메모리에 매핑하고 직접 액세스하는 것이 메모리 할당, 파일 읽기, 데이터 액세스, 잠재적으로 데이터를 디스크에 다시 기록하고 메모리를 확보하는 것보다 훨씬 간편하고 빠릅니다.
유명한 생산자-소비자 문제를 생각해보면, 생산자는 shm_open (),를 사용하여 공유 메모리 객체를 만들고, 우리의 목표는 생산자와 소비자가 데이터를 공유하도록 만드는 것이기 때문에, 우리는 다음을 사용합니다.mmap
syscall은 해당 공유 메모리 영역을 프로세스의 주소 공간에 매핑합니다.이제 소비자는 mmap 호출 후에 공유 메모리 개체(공유 메모리 개체는 "이름"으로 지칭됨)를 열고 이 개체에서 읽어와 생산자의 주소 공간을 매핑할 수 있습니다.
일반적인 용도: 들어오는 데이터를 사용자 공간 부분에서 사용할 수 있도록 해야 하는 네트워크 커널 드라이버.그러면 "공유 버퍼"가 두 부분 사이에 매핑되어 전체 데이터 교환 작업이 매우 자연스럽게 이루어집니다.물론 그 위에 관리 계층을 추가해야 합니다. + 아마도 약간의 신호 전달이 필요할 것입니다.
언급URL : https://stackoverflow.com/questions/12095241/when-would-you-use-mmap
'programing' 카테고리의 다른 글
말로카 3차원 배열이 C? (0) | 2023.09.21 |
---|---|
MISRAC가 포인터의 복사본이 메모리 예외를 유발할 수 있다고 명시하는 이유는 무엇입니까? (0) | 2023.09.21 |
jQuery의 로딩을 연기할 수 있습니까? (0) | 2023.09.21 |
입력에서 변경 시 이벤트를 프로그래밍 방식으로 강제하려면 어떻게 해야 합니까? (0) | 2023.09.21 |
Maria에서 데이터 부분 집합 선택 속도를 높이는 방법DB (0) | 2023.09.21 |