gpt4 book ai didi

c++ - 已完成线程使用的免费资源

转载 作者:行者123 更新时间:2023-11-30 17:50:17 25 4
gpt4 key购买 nike

我为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/

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