curl分配的内存太多(libcurl缓存的内存)

时间:2014-01-29 20:06:26

标签: c memory libcurl

我们正在使用LibCurl作为我们的SetTop Box应用程序。它用于多线程环境,我们可以同时打开多个卷曲句柄,但是下载完成后我们会立即关闭它。

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

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

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

是否有任何建议可以帮助我们减少curl缓存的内存?

1 个答案:

答案 0 :(得分:0)

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

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

此函数必须是第一个要调用的函数,它返回一个CURL简易句柄,您必须将其用作其他简单函数的输入。 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)中的描述。