2011-10-31 3 views
0

디자인별로 여러 프로세스간에 메모리 데이터를 공유하고 있습니다.api "CreateFileMapping"을 사용하여 생성 한 후에 공유 메모리 크기를 늘릴 수 있습니까?

디자인에 따라 응용 프로그램마다 여러 메모리 파일이 필요합니다. 각 프로세스마다 하나의 메모리 맵 파일이 필요합니다. 그러나 일부 프로세스는 10KB 이하가 될 수있는 것처럼 메모리 매핑 된 파일이 적습니다. 일부 프로세스는 1MB 이상의 메모리 파일을 필요로합니다. 일단 프로세스 작업이 끝나면 다른 프로세스를 위해 같은 메모리 맵 파일을 사용할 것입니다.

이 시나리오에서는 프로세스 요청을 기반으로 메모리 매핑 된 파일 크기를 늘릴 수 있습니다. 일단 CreateFileMapping을 사용하여 메모리 맵핑 된 파일을 생성합니다. 어떻게 메모리 크기를 늘리거나 크기를 줄일 수 있습니다.

또한이 하위 매핑 된 파일을 닫지 않고이 데이터를 정리하는 또 다른 하위 질문이 있습니다. 아무도 모른다면 을 공유하십시오.

미리 감사드립니다. hara

답변

0

아니요 - 생성 후 매핑을 증가시킬 수 없습니다 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx 참조).

설명하는 크기가 문제가되지 않으므로 "크기가 충분히 큰"크기로 이동합니다.


는 예를 memset() 사용 (memset에 불과 윈도우 API 매크로 매핑 인) 또는 ZeroMemory() (http://msdn.microsoft.com/en-us/library/1fdeehz6.aspx 또는 http://www.cplusplus.com/reference/clibrary/cstring/memset/ 참조) 할 수있는 데이터를 정리합니다.

+0

내 문제를 조사하고 공유 답변에 많은 감사드립니다. 당신이 말했듯이 지금은 크기가 문제가되지 않습니다. 하지만 사용자가 100 개의 프로세스를 실행하고 각 프로세스에 약 10MB가 필요하면 문제가 발생할 것입니다. 그 이유는 내가 동적 인 솔루션을 찾고 있습니다. zeromemory 제안 주셔서 감사합니다, 나는 그것을 시도합니다. – Haranadh

0

이 작업을 수행 할 수 있습니다. NtExtendSection을 참조하십시오.

+0

문서화되지 않았으므로 사용을 권장 할 수 없습니다. –

+0

@Roman R .: 좋은 지적. 또한 페이지 파일로 뒷받침 된 섹션에서는 작동하지 않습니다. – wj32

+0

두 분 모두에게 감사드립니다. :) – Haranadh

관련 문제