2012-02-17 2 views
0

프로세스를 포크하기 전에 프로그램에서 충분한 양의 메모리를 미리 할당 한 다음 포크 된 프로세스에서이 풀에서 메모리를 더 할당하거나 사용하고 싶습니다. 나는 Bget, Boost 등과 같은 메모리 할당 자들을 보았지만 그것을 사용하는 방법을 이해할 수 없었다. 메모리를 사전 할당하고 분기 된 프로세스에서 사용하십시오.

내가처럼 사용할 수있는 거기 밖으로 간단한 일이 있습니까

poolhandle = poolallocate (pool_size)

같은 갈래의 프로세스를 사용 뭔가 그런

PTR = allocatefromPool (poolhandle, no_of_bytes)

그리고 나서이 포인터를 다른 프로세스로 일부 IPC를 통해 전달하면 해당 프로세스에서도 액세스 할 수 있어야합니다.

올바른 방향으로 나를 가리킬 수 있습니까? Boost가가는 길이라면 어떻게 사용하는지 예제를 제공해 줄 수 있습니까?

답변

1

솔직히, 가장 쉬운 방법은 메모리 매핑 파일을 사용하는 것입니다. 그렇다면 물건을 구하기 위해 찾아 쓰거나 물건을 얻기 위해 찾아서 읽으십시오.

너머에는 항상 메모리를 공유하지 않는 액터 개념이 있습니다. 액터 간에는 메시지를 보내고 각자는 자신의 데이터 스토어 큐레이터입니다. 특히 프로그램 간 프로세스 및 스레드 간 메시징을 매우 단순하게 만드는 ZeroMQ와 같은 도구를 사용하면 프로그램하기가 더 간단합니다.

두 아이디어를 결합하면 각 액터 프로세스는 자신이 소유 한 메모리 매핑 된 파일 영역을 가지며 메시지를주고 받으면 읽고 쓸 내용을 알 수 있습니다.

여기 Posix shared memory vs mapped files

당신이 큰 데이터 블록이있는 경우 행동 IPC vs domain sock vs named pipes

을 조정하는 여러 프로세스에 필요한 IPC에 대한 하나의 공유 메모리와 같은 메모리 매핑 된 파일에 대한 자세한 내용은이 질문을 참조하십시오 메시지에서 돌아 다니면 메모리 매핑 파일에 데이터를 그대로두고 잠금없는 공유 형식을 구현하는 것이 좋습니다. "공유 메모리"또는 "데이터 구조"와 함께 키워드 잠금을 사용하는 많은 것들이 있습니다.

+0

안녕하세요, Michael 님, 입력을 제공해 주셔서 감사합니다. 메모리 매핑 된 파일은 내가 알고있는 한 가지 옵션이지만 쉽게 사용할 수있는 간단한 할당자를 사용하거나 직접 작성하는 작업의 요구 사항입니다. 기본적으로 힙/메모리 관리자의 일종입니다. 차라리 사용 가능한 옵션을 살펴보고 요구 사항을 충족하는지 확인하고 싶습니다. 메모리 맵핑 된 파일 즉, mmap 내가 들었던 것은 시스템 콜을 포함하고있어서 느릴 수있다. (미안하지만 이것을 검증하지는 않았다) – lucent

+0

인기 있고 간단한 힙 관리자/메모리 할당 자/풀을 사용할 수 있는가? 내가 쓸 수있어? boost는 실제로 메모리를 미리 할당하지 않습니다. 그렇습니까? 기본적으로 나는 큰 메모리 덩어리를 미리 할당하고 내 구조체, 배열, ints, chars..etc 데이터 구조를 할당하고 싶습니다. 또한이 포인터를 다른 (forked) 프로세스에 전달하면 프로세스가 해당 메모리에 액세스 할 수 있어야합니다. – lucent

관련 문제