如何取消分配dlopen()分配的内存?
我即将解决这个问题。我读了一些关于dlopen的问题,但仍然不清楚。dlopen似乎是通过calloc或malloc分配内存。但是如何释放这个内存呢 “dl”的类似代码指向泄漏问题 这是一个bug还是我们需要忽略它?如果我需要修理,有人能指导我修理吗 谢谢, Boobesh仔细阅读手册页。还可以阅读德雷珀的论文,其中给出了许多有趣的解释 通过调用如何取消分配dlopen()分配的内存?,dlopen,Dlopen,我即将解决这个问题。我读了一些关于dlopen的问题,但仍然不清楚。dlopen似乎是通过calloc或malloc分配内存。但是如何释放这个内存呢 “dl”的类似代码指向泄漏问题 这是一个bug还是我们需要忽略它?如果我需要修理,有人能指导我修理吗 谢谢, Boobesh仔细阅读手册页。还可以阅读德雷珀的论文,其中给出了许多有趣的解释 通过调用dlclose 请注意您拥有的dlopen-ed插件所使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如使用构造函数声明的函数等 您也不会在
dlclose
请注意您拥有的dlopen
-ed插件所使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如使用构造函数声明的函数等
您也不会在意,也不会费心打电话给dlclose
,因此会接受一些泄漏。实际上,在Linux上,您可以毫不费力地调用数十万次dlopen
(只有您的地址空间会增加),请参见我的示例。准确显示您的代码调用dlopen
和dlsym
;请注意,dlopen
-inglibc.so.6
似乎特别奇怪。你为什么要这么做?
(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)