【发布时间】:2010-01-29 02:32:41
【问题描述】:
我知道动态链接库在加载应用程序时加载到内存中,引用由操作系统加载程序解析。比如在windows kernel32.dll、user32.dll和gdi32 dll中,所以如果我的应用程序引用了一个kernel32.dll中的函数,比如CreateWindow,是整个dll都必须在进程中加载,还是只是一部分dll?
谢谢
【问题讨论】:
标签: windows
我知道动态链接库在加载应用程序时加载到内存中,引用由操作系统加载程序解析。比如在windows kernel32.dll、user32.dll和gdi32 dll中,所以如果我的应用程序引用了一个kernel32.dll中的函数,比如CreateWindow,是整个dll都必须在进程中加载,还是只是一部分dll?
谢谢
【问题讨论】:
标签: windows
整个事情,但别担心,它不是一遍又一遍地重新加载 dll,所有使用它的程序都有一个实例.... dll 的另一个名称是如此....或共享对象,这就是分享的重点。
【讨论】:
你引用一个函数,你就得到了整个 DLL。不能只加载 DLL 的一部分。
这很烦人,因为您获取所有 Shell32.dll 只是为了找到某人的主目录在哪里。叹息。
【讨论】:
别太担心这个,当你“加载”一个DLL时,它实际上只是一个映射的内存文件; Windows 操作系统使用缺页机制按需引入页面;因此,如果您只使用 DLL 的一小部分,您实际上不会把整个事情都搞错。
【讨论】:
只有您在该 DLL 中使用的函数是必需的,不必担心占用内存,因为这些 DLL 中的大多数都是标准的,而不仅仅是它们是动态的,这就是为什么只加载您的代码使用的某些函数的原因,而不是整个 dll。
希望这会有所帮助, 最好的祝福, 汤姆。
【讨论】: