Saya mencoba mencari tahu bagaimana sistem operasi menangani beberapa proses yang tidak terkait dengan memuat DLL/perpustakaan bersama yang sama. OS yang saya khawatirkan adalah Linux dan Windows, tetapi pada tingkat lebih rendah juga Mac. Saya berasumsi jawaban atas pertanyaan saya akan sama untuk semua sistem operasi.
Saya sangat tertarik dengan tautan eksplisit, tetapi saya juga ingin mengetahui tautan implisit. Saya kira jawaban keduanya juga akan sama.
Ini adalah penjelasan terbaik yang saya temukan sejauh ini mengenai Windows:
Sistem mempertahankan jumlah referensi per proses pada semua modul yang dimuat. Memanggil LoadLibrary akan menambah jumlah referensi. Memanggil fungsi FreeLibrary atau FreeLibraryAndExitThread akan mengurangi jumlah referensi. Sistem membongkar modul ketika jumlah referensinya mencapai nol atau ketika proses dihentikan (berapa pun jumlah referensinya). - http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx
Tapi itu meninggalkan beberapa pertanyaan.
1.) Apakah proses yang tidak terkait memuat DLL yang sama secara berlebihan (yaitu, DLL ada lebih dari sekali di memori) alih-alih menggunakan penghitungan referensi? (Yaitu, ke dalam ruang alamat masing-masing proses seperti yang saya rasa saya memahaminya)
jika DLL dibongkar segera setelah suatu proses dihentikan, itu membuat saya percaya bahwa proses lain yang menggunakan DLL yang sama persis akan dimuat secara berlebihan ke dalam memori, jika tidak, sistem tidak boleh mengabaikan jumlah referensi.
2.) jika itu benar, lalu apa gunanya menghitung DLL ketika Anda memuatnya beberapa kali dalam proses yang sama? Apa gunanya memuat DLL yang sama dua kali ke dalam proses yang sama? Satu-satunya alasan yang masuk akal yang dapat saya kemukakan adalah jika EXE mereferensikan dua DLL, dan salah satu DLL mereferensikan yang lain, akan ada setidaknya dua panggilan LoadLibrar() dan dua FreeLibrary() untuk perpustakaan yang sama.
Saya tahu sepertinya saya menjawab pertanyaan saya sendiri di sini, tapi saya hanya berasumsi. Saya ingin tahu pasti.