C++ DLL如何映射到当前程序虚拟地址空间

C++ DLL如何映射到当前程序虚拟地址空间,c++,dll,C++,Dll,当我在程序中加载DLL时,它是如何在内存中发生的?它是否加载到我的虚拟地址空间?如果有,文本和数据段存储在哪里?我正在维护一个32位的程序,它将可用堆的很大一部分用于图像处理例程,我想知道加载DLL需要多少担心,因为DLL本身可能会占用大量空间。是:进程需要访问的所有内容都必须在其地址空间中。这同样适用于您的代码和数据 在这里,您可以找到更多关于 这里已经解释过了 备注:dll可能在多个进程之间共享:然后操作系统只在内存中加载一次。但是,每个使用它的进程都可能在其自己的虚拟地址空间中的不同位置看

当我在程序中加载DLL时,它是如何在内存中发生的?它是否加载到我的虚拟地址空间?如果有,文本和数据段存储在哪里?我正在维护一个32位的程序,它将可用堆的很大一部分用于图像处理例程,我想知道加载DLL需要多少担心,因为DLL本身可能会占用大量空间。

是:进程需要访问的所有内容都必须在其地址空间中。这同样适用于您的代码和数据

在这里,您可以找到更多关于 这里已经解释过了


备注:dll可能在多个进程之间共享:然后操作系统只在内存中加载一次。但是,每个使用它的进程都可能在其自己的虚拟地址空间中的不同位置看到它(也可以参见这篇关于相对虚拟地址的文章)

因此,术语“将DLL加载到进程的地址空间”意味着物理加载DLL(如果它还没有被另一个进程加载),然后将DLL开始的物理地址映射到进程的虚拟地址?然后,可能需要修补进程中对DLL函数的所有引用(因为链接器不可能知道DLL将加载到哪里),或者在调用它们时使用GetProcAddress惰性地查找它们。对吗?这是总的想法。这取决于是加载时间还是运行tme动态链接(第二个链接提供了更多信息)