none
基址重定位 RRS feed

  • 问题

  • 你好:

            假设我有一个DLL文件d1中有一个函数fun。此时我在程序A1中调用loadlibrary加载d1,请问此时d1中是否会将代码中的地址进行重定位。如果此时我在程序A2中调用loadlibrary加载d1,因为d1在内存中只会保留一份,此时d1中是否会将代码中的地址再次进行重定位?如果再次进行重定位,那么对A1中调用fun函数如何做到不影响。

    2019年3月1日 9:45

答案

  • 在多个进程加载的同一个DLL会在一开始共享同样的物理内存页,但是重定位会造成部分内存页被重新定位,也就是说,多个进程加载的同一个DLL并不会完全共享代码段。如果代码段在很多地方引用数据段,甚至整个代码段都可能被复制到新的物理内存页。



    Visual C++ MVP


    2019年3月1日 22:23
    版主