运行时是把整个动态库都加载到内存中吗?
Contents
在 C++ 中,动态库(如 .dll
或 .so
文件)在加载时,操作系统会将整个库文件映射到进程的地址空间中。
具体的函数和数据只有在被实际使用时才会被加载到内存中。
(动态库作为一个整体被映射,但其中的各个部分仅在需要时才占用物理内存。)
另外:
C++ 提供了显式运行时链接的机制,程序可以在运行时根据需要动态加载库的特定部分。(dlopen
、dlsym
等函数)程序可以在运行时按需加载特定的符号(函数或变量)。
|
|
flag
:指定加载选项:
- RTLD_LAZY
:延迟解析符号,即在实际使用时才解析。
- RTLD_NOW
:立即解析所有未定义的符号。如果无法解析,dlopen
将返回 NULL
。
- RTLD_GLOBAL
:使加载的库中的符号在后续加载的其他库中可见。
- RTLD_LOCAL
:与 RTLD_GLOBAL
相反,加载的库中的符号对后续加载的库不可见(这是默认行为)。