gpt4 book ai didi

c - 当调用 dlclose 时共享库中的全局变量会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 15:22:50 38 4
gpt4 key购买 nike

如果通过 dlopen 和 dlclose 机制使用共享库(或 DLL),并且如果创建的共享库有一些内存来自堆的全局变量,那么当 dlclose 时这些变量和内存会发生什么叫什么?

如果在同一个进程中,再次调用 dlopen,会有什么行为?

最佳答案

如果 dlclose 将引用计数减少到零并且实际上卸载了库,则将来任何重新加载库都应该将库中具有静态存储持续时间的所有变量重置为其原始值。

但是,如果库被打开了不止一次,除了最后一次调用 dlclose 之外,所有的调用都会减少引用计数。有时一个库是否被多次打开可能并不明显,因为它可能在你不知情的情况下作为其他库的依赖项加载,除非它是你程序的本地模块,所以依赖它可能不是一个好主意关于这种“重置”行为。

雇佣俄罗斯人补充说:

Even if the library is dlopen()ed and dlclose()d exactly once, and is not a dependency of something else, the act of referencing symbols from it (via dlsym()) will also increment the reference count (and make the library not unloadable); at least on Linux.

我不知道这个信息是否准确。将来,请将新信息作为评论或新答案发布,而不是对其他人的答案进行编辑。如果您只是编辑其他人的答案,您会让他们为您答案的正确性负责,而他们可能不希望这样。

关于c - 当调用 dlclose 时共享库中的全局变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4732018/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com