Dea*_*ing 21
它被加载一次,所有程序共享相同的内存中代码副本.它有点复杂,但对于DLL的只读部分(即代码),操作系统加载程序使用一种称为"内存映射"的技术将DLL映射到进程的地址空间.对于所有进程,页面仅被加载到物理存储器中一次,即使它们可能将页面映射到其虚拟地址空间中的不同地址.
但是,每个进程都有一个单独的数据部分(因此全局变量不会被共享 - 除非您明确要求它们),并且它们显然也有一个单独的堆,以便不共享动态分配的内存.
这取决于你所说的"装载".
DLL准备共享使用代码和数据:大多数Windows环境都尊重可共享性(通过将代码的相同内存副本映射到每个进程的内存空间)来节省内存.
但是,"加载"操作的一部分(从进程的角度来看)正在运行DLL的初始化:这是在每个进程中单独完成的,具有对每个进程专用的数据区域的不同副本.
| 归档时间: |
|
| 查看次数: |
4785 次 |
| 最近记录: |