2012-01-02 2 views
0

하나의 DLL로 초기화되는 링크 된 목록 (요소에 대한 포인터와 다음 노드에 대한 포인터를 보유)에 대한 전역 포인터를 사용하고 있습니다. 이 전역 변수는 다른 DLL (공유 객체)에서 공유됩니다.다른 공유 라이브러리에서 전역 변수 사용

이전에 시스템이 전역 목록을 가져 오면 초기화되고 모든 DLL에 목록 값이 있습니다. 나중에 시스템이 하나의 DLL (x.so라고 함)을 실행하는 동안 메모리를 삭제하고 전체 목록을 다시 초기화하고 다른 DLL (y.so라고 가정 해 봅시다)이 값을 읽으려고하면 항상 이전 값을 얻습니다. 어떤 단서가 이런 일이 일어나고이 문제에서 어떻게 끝나야할까요?

어딘가에 힙 영역이 DLL에서 공유된다는 것을 읽었는데 왜이 문제에 직면하고 있는지 확신 할 수 없습니다. 어떤 도움을받을 수 있습니다.

답변

0

힙은 동일한 프로세스에서 DLL간에 공유되지만 프로세스마다 고유 한 힙이 있습니다. 다른 프로세스에로드되는 DLL에 전역 변수가있는 것 같습니다. 프로세스 간 의사 소통 없이는 공유 할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 변수의 값을 보유하고있는 다른 dll로 실행되는 프로세스가 하나 밖에없는 것 같습니다. – user1126078

+0

이 경우 코드가 다시 초기화됩니다. –