c++ - DLL加载和系统镜像空间

标签 c++ windows dll

DLL 只会真正加载一次。如果您的应用程序开始使用特定的 DLL,例如来自 MS-Office 的某些内容,动态加载程序将链接和重定向调用。

但是,什么时候为各种不同的用户和应用程序重复引用 DLL,在系统上将 DLL 镜像推送到系统空间,以便所有应用程序都可以使用它?

否则加载的图片是否留在用户空间?

请记住:所有应用实际上都在查看相同的 2gb 系统空间,这是通过虚拟寻址为它们虚拟化的,

或者,链接器是否始终将 DLLS 加载到内核空间,以便所有应用程序都可以使用它们。

最佳答案

DLL’s are only ever really loaded once.

这是不正确的。当进程由操作系统的加载程序启动时,或者当您通过 API 函数(如 LoadLibrary)请求它时,它们被映射到虚拟地址空间。每个进程都会获得一个新拷贝,并且每次发生这种情况时都会初始化 DLL。

没有所有进程同时使用的全局“系统空间”。每个进程都有自己的私有(private)虚拟地址范围(在 32 位 Windows 上为 4GB,通常有 2GB 可用内存)。如果您在自己的虚拟内存中覆盖 DLL 的某些部分,则其他进程中的 DLL 拷贝不会受到影响。如果不是这样,一个进程很容易使整个系统崩溃。

关于c++ - DLL加载和系统镜像空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23334120/

相关文章:

C++/MFC 如何从 PC 复制多个文件到 WinCE(移动设备)?

windows - 我在一个列中有一个重复的结果,即使我有针对它的规则。如何消除这种重复出现的情况?

c - DLL 中的函数未返回正确值

c++ - 如何在C应用程序中使用C++ DLL?

c++ - gSOAP 动态数组作为输入参数

c++ - 如何将osgEarth的ViewerWidget放入选项卡式MdiArea中?

c++ - 如果测试程序崩溃,Valgrind Reports 是否可信

linux - Nginx 与 Windows 或 Linux

c# - 为什么这段代码在 Windows 7 上有效,但在 Windows XP 上却无效?

.net - C++/CLI 在运行时显式加载托管 DLL(相当于非托管的 LoadLibrary)