【发布时间】:2015-08-13 00:17:43
【问题描述】:
当我在程序中加载一个 DLL 时,它是如何在内存中发生的?它会被加载到我的虚拟地址空间吗?如果是,文本和数据段存储在哪里?我正在维护一个 32 位程序,它使用大部分可用堆来进行图像处理例程,我想知道我应该为加载本身可能会占用大量空间的 DLL 担心多少。
【问题讨论】:
当我在程序中加载一个 DLL 时,它是如何在内存中发生的?它会被加载到我的虚拟地址空间吗?如果是,文本和数据段存储在哪里?我正在维护一个 32 位程序,它使用大部分可用堆来进行图像处理例程,我想知道我应该为加载本身可能会占用大量空间的 DLL 担心多少。
【问题讨论】:
是的:您的进程需要访问的所有内容都必须在其地址空间中。这也适用于您的代码和您的数据。
在这里您可以找到有关anatomy of process memory and adress space 的更多信息 这里解释了dll are loaded into the virtual adress space。
备注:dll 可能在多个进程之间共享:然后操作系统只在内存中加载一次。但是每个使用它的进程都可能在其自己的虚拟地址空间中的不同位置看到它(另请参阅SO answer 关于相对虚拟地址)。
【讨论】: