我正在用 libxml2 编写一个 XML 解析器。实际上,我完成了它,但是有一个非常烦人的记忆问题。该程序首先从我的数据库中获取一些链接,所有这些链接都指向一个 XML 文件。我使用 curl 来下载它们。这个过程很简单:我下载一个文件,然后解析它,等等......
问题似乎出在解析完成时。Curl 下载下一个文件,但似乎之前的 XML 没有被释放,因为我猜 libxml2 会将它加载到 RAM 中。在解析最后一个 XML 时,我发现自己有大约 2.6GB 的泄漏(是的,其中一些文件真的很大......)而且我的机器只有 4GB 的 RAM。它暂时有效,但将来会向数据库添加更多链接,所以我现在必须修复它。
我的代码非常基本:
xmlDocPtr doc;
doc = xmlParseFile("data.xml");
/* code to parse the file... */
xmlFreeDoc(doc);
我尝试使用:
xmlCleanupParser();
但文档说:“它不会释放任何与文档相关的内存。” ( http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser )
所以,我的问题是:有人知道如何释放所有与文档相关的内存吗?