gpt4 book ai didi

c - 有什么方法可以强制 "dlclose()"释放内存?

转载 作者:行者123 更新时间:2023-12-04 02:20:29 66 4
gpt4 key购买 nike

我的应用程序处理数千条消息并使用 dlopen/dlclose 等在运行时调用共享库中的函数。

我一直在分析运行时的内存,似乎(如我所料)dlclose() 在关闭后没有释放任何 malloc 的内存。所以我有一个相当严重的内存泄漏....

问题是这些共享库是别人写的,我不能更改源代码。有没有办法解决?我想我可以调用“子进程”来处理消息,然后当它终止时,该子进程的内存将消失....

还有其他想法吗?

感谢帮助

林顿

最佳答案

从您的问题中不清楚“泄漏”的内存是由您加载的库分配的内存,还是作为管理加载库的一部分的 dlopen 实现分配的内存。

如果它是由库分配的,那么要么是你滥用了库并且没有调用正确的函数来指示它释放它分配的内存,要么是它编写和分配不当(可能是首次使用)它计划保留、重复使用且永不释放的数据。

如果它是通过dlopen 的实现分配的,那么就没有问题;这只是意味着 dlopen 决定它不能安全地卸载库,也许是因为仍然有一些对其符号的引用。这没有问题,因为将来加载同一个库不会消耗更多内存,而是会重用已经加载的副本。

现在,假设问题不是您滥用库,所有问题都应该可以通过保持库打开而不调用 dlclose 并重用来解决如果/当您下次需要它时,它自己。这样,即使库在您背后分配内存并且没有提供释放它的方法,这只会发生一次(您第一次加载库时),而不是“N 次”,因此这不是“内存泄漏”。

关于c - 有什么方法可以强制 "dlclose()"释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7880183/

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