[C++] współdzielenie pamięci przez programy

0

Witam
Chciałbym, żeby dwa programy miały dostęp do tego samego bloku w pamięci systemowej. Czy jest w ogóle taka możliwość? Jeśli tak to proszę o jakieś małe nakierowanie w tym temacie.
Dzięki.

0

Jest taka możliwość. O ile mnie pamięć nie myli to pomogą Ci mutex'y.... Poszukaj na forum, było juz pare razy, wiec na pewno cos znajdziesz.

0

mutexy pomoga tylko w tym, żeby operacje na tej pamięci były niepodzielne (2 procesy nie zmodyfikuja "jednoczesnie" tej pamieci).

Do samej pamieci współdzielonej pod linuksem masz biblioteke shmem, pod windowsem http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx
No i w mutexy trzeba się bawić tylko pod linuksem, żeby zrobić sekcje krytyczne. Windows udostępnia przyjazdne api do sekcji krytycznych (enterCriticalSection i leaveCS).

0

@nav

O właśnie o to mi chodziło. Dzięki wielkie. Pozdro
http://telewizor.eu

0

@nav
Poczytałem trochę o "file_mappingu" i jednak nie bardzo mi się on podoba. Technika "file_mapping", z tego co się orientuję, pozwala stworzyć współdzielony zasób na dysku, a nie w pamięci ram. Mi zależy żeby wszystko było w pamięci operacyjnej. Czy da się zrobić współdzielony zasób w pamięci ram, z użyciem jakichś podstawowych bibliotek?

Aha! Zapomniałem wcześniej nadmienić, że chcę to zrobić w windowsie.

0

To poczytaj jeszcze raz, file mapping pozwala tworzyć obiekty istniejące wyłącznie w pamięci bądź będące reprezentacją fizycznych obiektów (zwykle plików na dysku). Wspomniano też o Boost, radzę się zapoznać.

0

@deus

info z MSDN "To share data, multiple processes can use memory-mapped files that the system paging file stores."

Page file to przecież zwykły plik na dysku, który udaje pamięć. Gdzie indziej czytałem też, że windows jest tak zaprojektowany, że nie pozwala kilku procesom na dostęp do tego samego bloku w pamięci ram. Jedyny obszar pamięci dostępny dla wielu procesów to "kernel memory", no ale przecież zwykły śmiertelnik nie ma do niego dostępu.

Możliwe, że to co napisałem powyżej jest błędne jednakże chciałem Ci przedstawić tok mojego rozumowania, który jest w konflikcie z tym co mówisz.

Jeśli zaś chodzi o boosta to wykorzystam go dopiero, gdy nie będzie żadnej innej ,standardowej możliwości.

0

Boost to akurat 'standardowy' element C++ do takich rzeczy. A kto powiedział, że te dane są cały czas w swapie? Przynajmniej kiedy są potrzebne - są w pamięci, to się niczym nie różni od normanej alokacji, ona też jak nie jest potrzebna to w swapie leży. Jak Windows nie pozwala jak pozwala? Mapowanie plików i sekcji właśnie temu służy. Do tego pliki wykonywalne mają współdzielone sekcje - dany fragment pamięci modułu jest współdzielony przez wszystkie instancje procesu, tak normalny proces użytkownika...

0

@deus
Dzięki za przekonujące wyjaśnienie. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1