我们知道WINDOWS应用程序需要调用API函数,这些API函数被封装在DLL里,如:KERNEL32.DLL GDI32.DLL USER32.DLL那么以上这3个DLL应该在WINDOWS启动后已经加载到内存中我的问题是:
现在我启动我自己的WINDOWS应用程序,里面调用到KERNEL32.DLL里的API函数(其实这是动态链接上的).
那么我的应用程序到底是又加载了一份KERNEL32.DLL到内存?还是与"一开始就加载到内存的KERNEL32.DLL"共享使用??

解决方案 »

  1.   

    是与"一开始就加载到内存的KERNEL32.DLL"共享使用
      

  2.   

    如果是共享的话,由写时拷贝机制,这个KERNEL32.DLL在内存中岂不越来越大??
    同问!!!
      

  3.   

    那些DLL会映射到你的进程空间中
      

  4.   

    这些DLL在windows启动的时候会被系统映射到内存中~~以加快程序的启动速度。。各个进程共享这些DLL,事实上DLL都是共享的,在内存中只有一份拷贝。写时拷贝机制只是针对 ”页“ 而言,例如你改写kernel32中的一字节,那么将这改写后的一页只映射到你的内存空间。以后你的程序修改这页上的数据不会发生 写时拷贝。考虑最坏的情况,假设系统中的20个进程都修改了kernel32的所有数据,那么内存中也只有20份拷贝。