Wczytywanie biblioteki DLL przez kilka procesów

0

Witam,
Mam dwie różne aplikacje.exe które korzystają z tej samej biblioteki dll. Po ich uruchomieniu obie umieszczą bibliotekę w swojej wirtualnej pamięci którą dostały od systemu operacyjnego. Czy jakaś część tej biblioteki będzie współdzielona między nimi w celu zaoszczędzenia rzeczywistej pamięci? Jeśli tak to jakie to będą sekcje? Wydaje mi się że kod programu czyli definicje wszystkich funkcji które się nie zmieniają mogły by być w pamięci w tym samym miejscu. Podobnie mogło by być z tekstowymi literałami które są tylko do odczytu. Czy Windows rzeczywiście oszczędza rzeczywistą pamięć w ten sposób czy wszystko jest kopiowane przy uruchomieniu nowego procesu?

Z góry dziękuję za pomoc!

0

Kazdy process ma swoja "pule pamieciowa"

Nie oszczedzisz duzo pamieci w tym co zrobisz, a tylko skomplikujesz projekt. Pierwsze pytanie to po co tak chcesz to zrobic? Czy rzeczywiscie ta bibloteka to Twoj bottle neck w aplikacji?

Jezeli tak to rozwiazalbym to inaczej. Powiedzmy, ze jest bibloteka Share.dll i sa dwa projekty ktore jej uzywaja, zrobilbym to tak

  1. Projekt 1
  2. Projekt 2
  3. Projekt 3

Projekt 3 zawiera implementacje Share.dll i Projekt 1 oraz Project 2 po prostu sie komunikuja z Projektem 3 po dane z dllki. Osiagniesz co to chcesz, a nie bedzie az tak duzego narzutu na zlozonosc w projekcie

0

W ten sposób Windows rzeczywiście oszczędzał pamięć, ale w czasach Windowsa 3.x. Zdziwiłbym się, gdyby nadal tak było.
Ten sam kod pomiędzy różnymi procesami niekoniecznie jest identycznym kodem, ze względu na możliwą relokację i ASLR.

0

@fasadin: OP tylko zadał pytania, czy system współdzieli ten sam blok pamięci dla biblioteki używanej przez kilka procesów, czy tego nie robi. Nie widzę tam nigdzie potrzeby zmuszenia systemu do tego, a tym bardziej pytań dotyczących implementacji. ;)

1
tytrydsdf napisał(a):

Z góry dziękuję za pomoc!

Gynveal ładnie opowiedział

0

Sorry za późną odpowiedź. Na stronie msdn znalazłem kiedyś takie zdanie:

DLLs also help reduce memory overhead when several applications use the same functionality at the same time, because although each application receives its own copy of the DLL data, the applications share the DLL code.
https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms682589(v=vs.85).aspx
No i nie wiem za bardzo jak to interpretować bo Azarien pisał że to dotyczyć mogło jedynie starych wersji windowsa. Jeszcze nie widziałem filmu powyżej ale zabieram się właśnie za oglądanie

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