mmap()으로 매핑된 메모리는 동일한 속성으로 포크(2)에 걸쳐 유지됩니다. 특정 플래그 상수는 _BSD_SOURCE 또는 _SVID_SOURCE가 정의된 경우에만 정의됩니다. _GNU_SOURCE를 요구하는 것으로도 충분하며, 이러한 플래그는 모두 Linux에 특정하므로 매크로를 구체적으로 요구하는 것이 더 논리적일 것입니다.) 관련 플래그는 다음과 같습니다: MAP_32BIT, MAP_ANONYMOUS (및 동의어 MAP_ANON), MAP_DENYWRITE, MAP_EXECUTABLE, MAP_FILE, MAP_GROWSDOWN, MAP_HUGETLB, MAP_LOCKED, MAP_NONBLOCK, MAP_NORESERVE, MAP_채우기 및 MAP_STACK. 1단계: 파일 크기 가져옵니다. mmap을 호출하기 전에 알고 있어야하지만 하위 집합만 mmap 할 수도 있습니다. mmap()은 유연한 메모리 매핑을 제공하며 사용할 매개 변수가 많이 있습니다. mmap 및 관련 시스템 호출은 유닉스의 버클리 소프트웨어 배포(BSD) 버전의 일부로 설계되었습니다. 해당 API는 해당 릴리스에서 구현되지 않았음에도 불구하고 4.2BSD 시스템 설명서에 이미 설명되어 있습니다. [1] 썬 마이크로 시스템은 SunOS 운영 체제에서 이 API를 구현했습니다. U.C. 버클리의 BSD 개발자들은 Sun에게 구현을 기부해 달라고 요청했지만, 이러한 회담은 코드 이전으로 이어지지 않았습니다. 4.3BSD-Reno는 Mach.[2] addr가 NULL이면 커널이 매핑을 만들 주소를 선택합니다. 이것은 새 매핑을 만드는 가장 이식가능한 방법입니다.
addr가 NULL이 아닌 경우 커널은 매핑을 배치할 위치에 대한 힌트로 사용합니다. Linux에서 매핑은 가까운 페이지 경계에서 생성됩니다. 호출의 결과로 새 매핑의 주소가 반환됩니다. POSIX는 시스템이 항상 개체의 끝에 있는 부분 페이지를 채우지 않아야 하며, 해당 시스템은 객체의 끝 이후에도 객체의 수정 사항을 작성하지 않습니다. Linux에서 개체가 끝난 후 이러한 부분 페이지에 데이터를 작성하면 파일이 닫혀 매핑되지 않은 후에도 데이터가 페이지 캐시에 남아 있으며 데이터가 파일 자체에 기록되지 않더라도 후속 매핑은 수정된 콘텐츠를 볼 수 있습니다. 경우에 따라 이 문제는 msync(2)를 호출하여 맵 해제가 수행되기 전에 해결할 수 있습니다. 그러나 tmpfs에서는 작동하지 않습니다(예: shm_overview(7)에 설명된 POSIX 공유 메모리 인터페이스를 사용하는 경우). 위의 구현은 최소한의 예일 뿐이므로 오류를 제대로 확인하지 못합니다. 위의 세 플래그는 POSIX.1-2001에 설명되어 있습니다. 리눅스는 또한 다음과 같은 비표준 플래그에 대해 알고 : 예! 간단한 예로 몇 바이트만 예약하고 자식 프로세스를 종료할 때 공유 메모리의 값을 변경할 수 있습니다.
익명 메모리를 공유하는 것은 복사, 시스템 호출 또는 디스크 액세스 오버헤드가 없기 때문에 프로세스 간 통신의 매우 효율적인 형태입니다.