2014-07-24 2 views
1

공유 메모리에 구조체를 생성해야합니다. 이 클래스의 예입니다프로세스 내부 공유 메모리를 클래스 내부 클래스로 부울

struct A{ 
std::string str1; 
int val; 
} 
struct B{ 
    A inner; 
    std::string name; 
} 
나는 웹이의 예를 찾을 수 없습니다,하지만 일부 검색 후 나는 어떤 할당자를 구현해야 할 수도 있음을 볼 수 있었고, 그

문자열 같은 유형 맨손으로 사용해서는 안, 그래서 나는 다음과 같습니다 문자열에 대한 할당 생성 :

typedef allocator<char, ip::managed_shared_memory::segment_manager> char_alloc 
class String2: public ip::basic_string<char, std::char_traits<char>, char_alloc > { public:  
    String2(char_alloc& _all): ip::basic_string<char, std::char_traits<char>, char_alloc >(_all) {;} }; 

을하지만 지금은 내가 두 클래스에 대해 다음과 같이 작동하는 할당을 만드는 방법을 이해하려고 몇 가지 문제가있다.

누구나 이와 비슷한 예가 있습니까?

미리 감사드립니다.

답변

0

std :: string 대신 char을 사용해야합니다.

struct A{ 
char str1[64]; 
int val; 
}; 

struct B{ 
A inner; 
char name[64]; 
}; 
0

게재 위치가 새로 도움이 될 수 있습니다. 당신이 알 수없는 수단에 의해 생성 된 공유 메모리에 대한 포인터 있다고 가정

void* some_shared_mem; // initialized somehow 
B* shared_B = new (some_shared_mem) B; // call the B constructor. 
share_B->A.val = 5; 

을하지만, 당신은 포인터를 할당 공유 메모리에 아무것도 넣지해야한다. 이러한 포인터가 공유 메모리를 다시 참조하도록 보장한다고해도 메모리를 공유하는 모든 프로세스가 동일한 주소의 공유 메모리를 볼 수는 없습니다. some_shared_mem은 프로그램에서 0x10000이고 다른 프로그램에서는 0x20000 일 수 있습니다. 공유 포인터가 공유 메모리 (예 : 0x10010)에서 할당 된 경우에도 매핑이 0x20000 인 프로그램은 해당 지점에서 공유 메모리 내에 있지 않은 0x10010이라는 지점을 볼 수 있습니다.

공유 메모리에 매핑되는 다양한 구조에서 참조 또는 포인터가없는 한 시도 할 수 있습니다.