문제

나는 공유 메모리 세그먼트 또는 메모리 매핑 파일에 배치 할 수있는 stlish 컨테이너에 대한 욕구를 오랫동안 사용했습니다.

일반 STL 컨테이너를 공유 메모리 세그먼트에 배치하기 위해 사용자 정의 할당자를 사용하고 배치하는 것을 고려했습니다. (이 DDJ처럼 기사). 문제는 STL 컨테이너가 내부적으로 자신이 소유 한 메모리에 대한 포인터가 있다는 것입니다. 따라서 공유 메모리 세그먼트 또는 메모리 매핑 된 파일이 다른 기본 주소 (아마도 후속 실행 또는 두 번째 프로세스에서)에로드되면 내부 포인터가 갑자기 유효하지 않습니다. 내가 알아낼 수있는 한, 사용자 정의 할당 자 접근 방식은 항상 동일한 주소에서 메모리 세그먼트를 프로세스에 매핑 할 수있는 경우에만 작동합니다. 적어도 메모리 매핑 파일을 사용하면 시스템이 느낌이 어디에 있는지 맵핑되면 그 사실이 많지 않은 경험이 많습니다.

나는 이것을하는 방법에 대해 약간의 생각을 가지고 있었지만 다른 사람이 이미 일을했다면 피하고 싶습니다.

최고의 잠금 전략은 응용 프로그램 의존적이기 때문에 현재 토론에서 잠그고 있습니다.

도움이 되었습니까?

해결책

이를위한 가장 좋은 출발점은 아마도 Boost Interprocess 라이브러리 일 것입니다. 여기에는 공유 메모리의 맵의 좋은 예가 있습니다.간호학 맵

당신은 아마도 오프셋 스마트 포인터의 섹션을 읽고 싶을 것입니다.이 포인터는 당신이 언급 한 내부 포인터 문제를 해결합니다.오프셋 포인터

다른 팁

당신은 또한 그것을 확인하고 싶을 수도 있습니다 인텔 스레딩 빌딩 블록 (TBB) 컨테이너.

나는 항상 좋은 경험을했습니다 (몇 년 전) 에이스. 네트워킹/통신 프레임 워크이지만 공유 메모리에 대한 섹션이 있습니다.

나는 독점 버전 만 알고 있습니다. 블룸버그 그리고 EA 둘 다 STL 버전에 대해 출판했지만 (내 지식으로) 노동의 과일을 풀어주지 않았습니다.

QT의 QsharedMemory 구현을 사용해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top