Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果我使用打开一个动态库dlopen并且我的程序在没有相应的情况下终止dlclose,引用计数会减少吗?如果没有,会发生什么?库会一直加载到下次重新启动吗?
dlopen
dlclose
动态加载器是用户空间代码(linux/glibc 中的 ld.so.1)。它被加载到您正在运行的程序的用户空间中,并且不与其他进程交互。所以没有全局引用计数器。
但是,有一种方法可以在进程之间共享动态库的代码。动态加载器使用 mmap() 将库代码加载到进程内存中。同一个库的 mmap 数据将在所有使用它的进程之间共享(直到他们向这些数据页写入任何内容,这将使用 COW 创建他们自己的数据副本)。当你的程序终止时,所有的 mmap 区域都会被释放。您可以认为这是一种引用计数器递减 - 您的数据页副本现已发布。