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

标签 c++ c memory-leaks boost-asio libcurl

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

相关文章:

c++ - 如何使用 Freetype 沿基线对齐字形?

在等距投影中将 3D 坐标转换为 2D

MySQL C API内存泄漏?

c++ - 使用视觉检漏仪

c - 为什么不应该使用 ftime?

memory-leaks - Instruments 堆栈跟踪中缺少方法调用

c++ - 如何使用getc编写getLine函数

c++ - 为什么我需要使用 CGAL 和 CMake 构建我的 C++ 程序?

c++ - 使用 4/5 舍入规则对数字进行舍入

c - 使用C将字符串分成两半