gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:28 24 4
gpt4 key购买 nike

我们将 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/

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