我为OpenWrt开发了一个多线程缓存代理(Linux用于路由器,因此可用的RAM很少)。我使用了 Boost 和 Curl 库,它工作正常,但它的 RAM 消耗并没有停止增加(内存泄漏)。
- 我释放所有动态分配的变量
- 我关闭所有打开的文件
- 清理初始化的curl句柄
- 全局变量是常量
这是我的主要代码的一部分:
while (true) {
ip::tcp::socket* socket = new ip::tcp::socket(io_service);
acceptor.accept(*socket);
pthread_t thread;
pthread_create(&thread, NULL, handleRequest_thread, (void*) socket);
pthread_detach(thread);
}
可以肯定内存泄漏发生在“handleRequest_thread”,所以我的问题是: 有没有办法在线程完成后释放所有资源(内存、打开的文件...)?
最佳答案
您无法自动释放所有资源(只能通过退出进程,但这不是很好的方法)。所以你必须控制你的资源,尽可能使用智能指针,自动关闭文件(例如使用 fstream )等。 至于线程:也许你应该使用 boost.thread 来代替,它将确保你不会忘记清理线程对象本身(使用普通 pthreads 很容易忘记的事情)。
关于c++ - 已完成线程使用的免费资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366924/