2012-05-14 2 views
0

나는 managed_shared_memory지도 컨테이너를 보유하고있는 객체가 다음과 같이 정의되어있다 : .boost :: interprocess 메모리 크기

typedef std::pair<std::string, T> ValueType; 
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator; 
typedef map<std::string, T, std::less<std::string>, ShmemAllocator> SharedMap; 

제가 사용하는 공유 메모리의 크기를 결정해야합니다. 지도의 키는 알 수없는 크기의 std :: 문자열이며 데이터는 알 수없는 크기의 템플릿 유형이며 각 데이터의 크기는 다양합니다.

누구나 내가 사용중인 메모리를 어떻게 추적 할 수 있는지 제안 할 수 있습니까?

나는 boost :: interprocess에 새로운 것이므로 어떤 제안이라도 크게 도움이 될 것입니다.

+0

무시. – interjay

+0

방금 ​​대답했습니다. – andre

답변

1

예외 처리를 사용하여 문제를 해결했습니다. bad_alloc 예외가 발생할 때까지지도에 삽입합니다. 나는 예외를 잡아서 공유 메모리의 크기를 재조정했다.


나는 managed_shared_memory의 멤버 함수해야한다 방법 static bool grow(const char *shmname, size_type extra_bytes)을 사용

나의 제안은이 코드가 잘못된 이유를 설명 이전 질문에 준 대답 보는 것입니다, 완전히 당신이