在 C++ 中,动态库(如 .dll.so 文件)在加载时,操作系统会将整个库文件映射到进程的地址空间中。 具体的函数和数据只有在被实际使用时才会被加载到内存中。 (动态库作为一个整体被映射,但其中的各个部分仅在需要时才占用物理内存。)

另外:
C++ 提供了显式运行时链接的机制,程序可以在运行时根据需要动态加载库的特定部分。(dlopendlsym 等函数)程序可以在运行时按需加载特定的符号(函数或变量)。

1
2
#include <dlfcn.h>
void *dlopen(const char *filename, int flag);

flag:指定加载选项: - RTLD_LAZY:延迟解析符号,即在实际使用时才解析。
- RTLD_NOW:立即解析所有未定义的符号。如果无法解析,dlopen 将返回 NULL
- RTLD_GLOBAL:使加载的库中的符号在后续加载的其他库中可见。
- RTLD_LOCAL:与 RTLD_GLOBAL 相反,加载的库中的符号对后续加载的库不可见(这是默认行为)。