初学DLL编程,有个初级问题要请教:当一个DLL会为多个进程所使用时,是不是每启动一个进程,都要加载一次(加载到自己的私有空间)?
比如说,kernel32.dll每个程序都需要的。那么是不是为每个进程都要加载到自己的私有空间?如果是这样,那每个进程都要加载一次,即进程文件影射,启不是很浪费时间?

解决方案 »

  1.   

    动态链接库一旦装入内存,Dlls函数可以被系统中的任何正在运行的应用程序软件所使用,而不必再将DLLs函数的另一拷贝装入内存
      

  2.   

    第一次加载的时候,需要将DLL从磁盘上加载到内存中,实际上是将磁盘的位置影象的,省去了分配内存的时间,然后加载进程将DLL映射到该进程的地址空间的指定位置(DLL有默认位置),如果不成功,进程试着根据DLL重新分配另外一个地址。
    如果第二个进程需要加载DLL的时候,这个时候的第一步分配内存的工作就不需要了,只需要将DLL的映射到本进程的地址空间中,这样就可以访问DLL了,其他步骤同一
      

  3.   

    理论上是这样。但如果不是操作系统自带的DLL文件,而是什么人自己开发的,别人就很难做到这一点。并不是不能用,而是很难用。因为你往往很难知道怎么用。