On 12/01/11 17:11, Oleg Goldshmidt wrote:

I admit I am not up-to-date (but my recollection refers to years ago, too). Windows DLLs were not equivalent to UNIX/Linux shared libraries - they contained "relocatable" and not "position-independent" code, and each process had its own copy mapped into memory (yes, runtime memory).
Not exactly.

It is true that Windows DLLs are relocatable (rather than position independent), but that does not necessarily mean that are relocated. Each DLL comes with a recommended load address (in virtual memory), and if no collision with another DLL happens, that is where it will be loaded. If that is the case, Windows will happily share the same physical memory for all copies of the text and read only segments of the DLL. When compiling a single project, it is fairly easy to make sure that all DLLs fit into memory together without being relocated.

Even on the rare occasion that the DLL does need to be relocated, the Windows kernel is aware that this page, while faulted, can be discarded and later recalculated from the file. As such, it is a candidate to be released from memory, despite being "changed" compared to the image on disk.

Shachar

--
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
http://www.lingnu.com


_______________________________________________
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il

Reply via email to