c - curl 分配的内存过多(libcurl 缓存的内存)

标签 c memory libcurl

我们将 LibCurl 用于我们的机顶盒应用程序。它用于多线程环境,我们可能会同时打开多个 curl 句柄,但我们会在下载完成后立即关闭它。

似乎在打开 curl 句柄时(无论我们下载了多少),curl 分配了一些内存,随着 curl 句柄数量的增加而增加(我测试了一个有 100 个线程的场景——大约 30Mb 的内存是提前分配)。 (一旦我们调用 curl_easy_init()---在句柄被销毁后,内存中有一个跳转,没有被释放)

在我们的应用程序中,例如:一个 curl 句柄可能只用于查看服务器是否已启动 --- 但即使这样也会消耗我们的内存。

内存在我们的场景中非常重要。因此,我们不希望 curl 提前缓存那么多内存。

有什么建议可以帮助我们减少curl缓存的内存吗?

最佳答案

http://curl.haxx.se/libcurl/c/curl_easy_init.html

在多线程情况下查看所描述的问题。 引用:

此函数必须是第一个调用的函数,它返回一个 CURL easy 句柄,您必须将其用作其他 easy-functions 的输入。 curl_easy_init 初始化 curl 并且此调用必须在操作完成时对 curl_easy_cleanup(3) 进行相应的调用。

如果您还没有调用 curl_global_init(3),curl_easy_init(3) 会自动调用。这在多线程情况下可能是致命的,因为 curl_global_init(3) 不是线程安全的,并且可能会导致资源问题,因为没有相应的清理。

强烈建议您通过自己正确调用 curl_global_init(3) 来不允许这种自动行为。该函数的使用方法详见全局环境要求libcurl(3)中的描述。

关于c - curl 分配的内存过多(libcurl 缓存的内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441504/

相关文章:

c - 共享内存中的指针 - C 语言 Linux

c - 我如何获得 ANSI C 标准的副本?

c - 什么可能导致死循环,由 linux 内核中的 print "Dead loop on virtual device "指示?

c - .Call mdsplib - METAR - 缓冲区溢出 - 这个 valgrind 输出是什么意思?

http - 为什么现代 curl 版本会切断 URL 的#anchor 部分?

c - 如何在 C 中第二次执行函数时将 printf 打印到下一行?

java - 即使使用工具,Java 中对象的内存地址

java - 使用内存数据库(例如 SQLite)是否比将所有内容保存在 HashMap 或其他数据结构中更好?

c++ - 如何在 C++ 中使用文件指针 CURL POST 文件

c++ - 您应该通过命令行使用 curl 还是包含库?