gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:49:52 31 4
gpt4 key购买 nike

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com