1

如果我使用打开一个动态库dlopen并且我的程序在没有相应的情况下终止dlclose,引用计数会减少吗?如果没有,会发生什么?库会一直加载到下次重新启动吗?

4

1 回答 1

3

动态加载器是用户空间代码(linux/glibc 中的 ld.so.1)。它被加载到您正在运行的程序的用户空间中,并且不与其他进程交互。所以没有全局引用计数器。

但是,有一种方法可以在进程之间共享动态库的代码。动态加载器使用 mmap() 将库代码加载到进程内存中。同一个库的 mmap 数据将在所有使用它的进程之间共享(直到他们向这些数据页写入任何内容,这将使用 COW 创建他们自己的数据副本)。当你的程序终止时,所有的 mmap 区域都会被释放。您可以认为这是一种引用计数器递减 - 您的数据页副本现已发布。

于 2013-01-16T07:47:08.737 回答