linux动态库会被多次加载吗
linux动态库会被多次加载吗详细介绍
在 Linux 系统里,动态库是否会被多次加载取决于具体情形。下面为你详细介绍:
同一进程内
在同一个进程中,动态库通常仅会被加载一次。当进程首次调用dlopen函数(用于加载动态库)或者在程序启动时链接动态库,系统会将动态库加载到内存里,同时为其创建一个副本,之后该进程内的所有代码都会共享这个副本。即便后续再次调用dlopen尝试加载相同的动态库,系统也不会再次把该库加载到内存中,而是直接返回已加载库的句柄。
下面是一个简单示例,借助dlopen函数来加载动态库:
c
handle1 RTLD_LAZY
handle1
handle2 RTLD_LAZY
handle2
handle1 handle2
handle1
handle2
在这个示例中,尽管调用了两次dlopen来加载相同的动态库libexample.so,但实际上该库仅被加载了一次,两次调用返回的句柄是相同的。
不同进程间
不同进程加载动态库时,每个进程都会独立地将动态库加载到自身的地址空间中。也就是说,每个进程都有一份动态库的副本,各个进程间的副本互不干扰。
总结
- 同一进程内,动态库一般仅加载一次,所有代码共享该副本。
- 不同进程间,每个进程都会独立加载动态库,各自拥有一份副本。