file-mapped memory에서 stl 컨테이너 같은 것들을 동작하게 할 수 있을까요?
글쓴이: ssobranss / 작성시간: 일, 2011/08/14 - 4:35오후
1년전쯤에 생각해보다가 관뒀는데 다시 필요하게 됐네요.
구체적으로 무슨 뜻이냐하면
windows를 기준으로
프로그램간 메모리 공유를 할때 file-mapped memory를 쓰곤하잖아요.
MapViewOfFile 함수를 통해 메모리의 포인터를 구하는데 문제는 이 포인터가
함수를 호출할때마다 달라집니다. 그리고 서로 다른 프로그램에서 같은 객체를 대상으로 MapViewOfFile을 호출해도 서로 다른 포인터가 반환됩니다.
그래서 file-mapped memory내에 해당 메모리의 어떤 지점을 나타내는 포인터를 기억해놓고 사용하는건 안되죠.
대신 오프셋을 사용해서 액세스해야합니다.
문제는 이렇게 오프셋을 사용하면 file-mapped memory에 stl 컨테이너 같은 것들을 할당할 수 없습니다.
얘를들어 vector만 하더라도 메모리의 시작 포인터를 기억해놓고 그걸 바탕으로 iterator도 리턴하고 v[0],v[1] 이런 것들의 포인터도 계산하죠.
즉 stl 객체들은 allocator만 사용자가 지정해줄수 있지 포인터 계산에는 전혀 관여할 수가 없습니다.
그래서 그냥 stl을 싹다 갈아서 새로 작성해볼까 해봤는데 그건 너무 비효율적인것 같구요;;
다른 대안이나, 혹시 메모리 참조에 사용자가 관여할 수 있는 템플릿 라이브러리가 있나요?
또는 이런 문제를 만났을때 어떻게 해결하셨나요?
Forums:
찾아보니 이런게
찾아보니 이런게 있네요
http://stackoverflow.com/questions/1272073/boost-interprocess-shared-memory-and-stl-types
댓글 달기