DLL编译后的寿命是多长?

时间:2019-12-09 17:39:46

标签: windows

我正在阅读有关内存的部分,这确实令人困惑。编译后的DLL到底会发生什么?

有些困扰我的问题:

是否仅将其加载到内存中,并且需要访问它的所有进程仅获得指向其所在位置的指针?

何时加载?我确定它不是在编译后随便加载到内存中的,所以是否有一个特殊的过程来加载它,或者Windows在某个进程需要它并保持其在其他进程之间共享时是否加载DLL?

从Microsoft文档

  

每个加载DLL的进程都将其映射到其虚拟地址空间。进程将DLL加载到其虚拟地址后,便可以调用导出的DLL函数。

“映射”看起来如何?我发现这有点令人困惑。

我不知道这是否是相关信息,但我对自定义DLL(由我编写的DLL)而不是系统DLL尤其感兴趣

1 个答案:

答案 0 :(得分:0)

一个exe文件lists DLLs is wants to link to,因此,当加载程序加载一个exe时,它将加载按要求列出的DLL,除非它们已经被加载。 DLL可能在首次加载时运行初始化代码。

当然,可以按名称动态加载DLL,然后在程序发出LoadLibrary API调用时加载DLL。这对于实现可动态加载的插件很有用。

Windows为每个DLL保留一个引用计数器,因此当所有进程停止退出DLL时(通过退出或显式调用FreeLibrary),Windows将卸载该DLL,从而使它有机会运行任何清理代码。 / p>

相关问题