1:同一个DLL放在不同的目录下,同一个进程不同线程动态加载这个DLL,在内存中副本是几个?
2:同一个DLL不同版本放在不同的目录下,同一个进程不同线程动态加载这个DLL,在内存中副本是几个?

解决方案 »

  1.   

    2.不同的线程动态调用不同目录下的不同版本的DLL,在内存中的副本不会只有一个。调用多少个不同版本的dll就有多少个副本。
    1.不太确定,不知道windows对dll内容有没有比较验证,应该与2的情况相同。
      

  2.   

    加载几次应该就有几个
    同一个DLL没必要加载多次吧,加载一次公用就行了
      

  3.   

    我想系统只会根据绝对路径来判断是不是同一模块,在不使用相对路径的前提下。
    因此动态装载的话,路径不同的DLL都会装载一份(如果你代码要求他装载的话),跟版本没什么关系。
    建议使用返回的句柄验证一下。
      

  4.   

    和线程和版本无关,每个DLL文件在每个进程中有一个内存映射。
      

  5.   

    当使用WriteProcessMemory改了某个dll的代码段时,如果该进程有COPYONWRITE机制则会为该进程单独拷贝一份。
      

  6.   

    dll产生的背景就是为了给不同的程序共享相同的程序代码。因此dll没有自己的数据段,不同程序调用dll时产生的数据发布在各自的数据段中。当程序首次调用dll时,系统会在程序空间中生成添加dll的内存映射。
    当使用WriteProcessMemory改了某个dll的代码段时,如果该进程有COPYONWRITE机制则会为该进程将响应的代码页生成一份单独的拷贝。