gpt4 book ai didi

c++ - .dll 文件是为每个程序加载一次还是为所有程序加载一次?

转载 作者:IT老高 更新时间:2023-10-28 21:56:17 28 4
gpt4 key购买 nike

我有一个简单的小问题,知道的人可以轻松回答,我搜索了谷歌但找不到答案。

计算机上同时运行着许多程序,我的问题是:当程序加载 DLL 时,它是实际加载 DLL 文件还是找到已经加载 DLL 的内存?例如,ws2_32.dll (winsock 2) 是为每个使用 winsock 的程序加载,还是只加载一次,所有使用它的程序都使用相同的内存地址来调用函数?

最佳答案

它被加载一次,所有程序共享相同的内存中代码拷贝。这有点复杂,但是对于 DLL 的只读部分(即代码),操作系统加载程序使用一种称为“内存映射”的技术将 DLL 映射到进程的地址空间。对于所有进程,页面只加载到物理内存一次,即使它们可能将页面映射到其虚拟地址空间中的不同地址。

但是,每个进程都有一个单独的数据部分(因此全局变量不共享 - 除非您明确要求它们共享),而且它们显然也有一个单独的堆,因此动态分配的内存不共享。

关于c++ - .dll 文件是为每个程序加载一次还是为所有程序加载一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846310/

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