我在理解我从Microsoft读到的以下语句时遇到问题。它说:“在相同基地址加载相同DLL的多个进程共享物理内存中DLL的单个副本。”

所以我了解的是,如果一个DLL必须在不同进程之间共享,那么该DLL必须在每个进程虚拟内存中加载到相同的基址中。为什么呢?如果将进程加载到不同进程虚拟地址空间中的不同基址上会发生什么,因为最终所有进程最终都将为共享DLL访问同一物理内存。

最佳答案

镜像部分绑定(bind)到磁盘上的文件。虽然我们不修改部分集的某些页面-该页面将由图像文件共享和支持。但是,如果我们修改页面-图片文件将无法再支持它。系统需要为此修改后的页面分配新的物理页面。此页面已经是私有(private)进程,并由页面文件支持。

被映射到相同或不同地址的段不会直接发挥作用。但是如果图片部分-如果它未映射到公共(public)首选地址-必须将其重新放置。重定位-需要修改代码。结果是修改图像页面,分配新的专用物理页面

关于windows - 可以通过多个进程共享一个DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57182925/

10-11 23:23
查看更多