aug 02, 2019
admin
0
42

boost 공유메모리 예제

우리가 본 예제에서 파일 또는 공유 메모리 콘텐츠는 프로세스의 주소 공간에 매핑되지만 주소는 운영 체제에서 선택했습니다. 예를 들어 공유 메모리 및 메모리 매핑된 파일에서 매핑된 영역을 STL 컨테이너에 혼합할 수 있습니다. 매핑된 영역에만 종속된 라이브러리는 다시 컴파일하지 않고도 공유 메모리 또는 메모리 매핑된 파일로 작업하는 데 사용할 수 있습니다. 메모리에 연결하고 맵의 데이터에 액세스하는 클라이언트 프로세스에 대한 코드입니다. 일단 생성하거나 열리면 프로세스의 주소 공간에서 공유 메모리 개체를 매핑하기만 하면 됩니다. 사용자는 전체 공유 메모리 또는 일부만 매핑할 수 있습니다. 매핑 프로세스는 mapped_region 클래스를 사용하여 수행됩니다. 클래스는 공유 메모리 또는 매핑 기능(예: 파일)이 있는 다른 장치에서 매핑된 메모리 영역을 나타냅니다. mapped_region는 모든 memory_mappable 개체에서 만들 수 있으며, 당신이 상상할 수 있듯이 shared_memory_object는 memory_mappable 개체입니다: 여러 프로세스가 동일한 파일/공유 메모리를 매핑하는 경우 매핑 주소는 각 프로세스마다 확실히 다를 수 있습니다. 각 프로세스가 다른 방식으로 주소 공간을 사용했을 수 있기 때문에(예: 다소 동적 메모리 할당) 파일/공유 메모리가 동일한 주소에 매핑될 것이라는 보장은 없습니다.

construct()는 개체가 관리되는 공유 메모리에 지정된 이름으로 이미 있는 경우 실패합니다. 이 경우 construct()는 0을 반환하고 초기화가 발생하지 않습니다. 기존 개체를 사용 하려면 기존 개체에 대 한 포인터를 반환 하거나 새 개체를 만드는 멤버 함수 find_or_construct()를 사용 합니다. 이러한 fst 테이블은 공유 메모리에 저장할 수도 있습니다. 이 경우 다른 R 세션에서 테이블에 액세스할 수 있지만 다른 프로그래밍 언어 및 응용 프로그램에서도 더 중요할 수 있습니다. 다음은 공유 메모리 개체를 사용하는 방법을 보여 줄 C로 작성된 간단한 샘플입니다. 샘플은 BOOST 라이브러리를 사용합니다. BOOST 라이브러리는 기본 운영 체제와 독립적으로 공유 메모리 개체를 관리하는 매우 쉬운 방법을 제공합니다. 매핑된 영역에 개체를 배치하고 모든 프로세스에서 해당 영역을 다른 주소로 매핑할 때 원시 포인터는 객체를 배치한 프로세스에대해서만 유효하므로 문제가 됩니다. 이를 해결하기 위해 Boost.Interprocess는 원시 포인터 대신 사용할 수 있는 특수 스마트 포인터를 제공합니다.

POST CATEGORIES

Okategoriserade