如何释放dlopen()分配的内存?

时间:2014-02-02 07:30:00

标签: dlopen

我即将解决这个问题。我读了几个关于dlopen的问题,但仍然不清楚。似乎dlopen是通过calloc或malloc分配内存。但是如何释放这段记忆呢?

类似的代码指出“dl”

的泄漏问题
(snip)
Event alloc_fn: Called allocation function "dlopen"
Event var_assign: Assigned variable "dl" to storage returned from "dlopen(&"libc.so.6",1)"
261             dl = dlopen("libc.so.6", RTLD_LAZY);
At conditional (1): "dl" taking true path
262             if (dl) {
Event noescape: Variable "dl" not freed or pointed-to in function "dlsym"
263                 func = dlsym(dl, "fdopen");
264             }
265             assert(func != NULL);
266         }
Event leaked_storage: Variable "dl" goes out of scope
267         return (*func)(fd, mode);
(snip)

这是一个错误还是我们需要忽略它?如果我需要修理,请任何人指导我修理它吗?

谢谢, Boobesh

1 个答案:

答案 0 :(得分:1)

仔细阅读dlopen(3)手册页。另请阅读Drepper的论文How To Write Shared Libraries,其中提供了许多有趣的解释。

您可以通过调用dlopen

来释放dlclose获取的资源

请注意您使用dlopen编辑的插件使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如用GCC function attribute constructor等声明的函数......

你也可以不在乎,也不用打扰dlclose来接受一些泄漏。实际上,在Linux上,你可以毫不费力地调用数十万次dlopen(只有你的地址空间会增长),请参阅我的manydl.c示例。

相关问题