0xC*_*ACE 1 c++ memory-management tinyxml
我有一个200 MB的 XML文件,我正在使用TinyXML加载.我的问题是,当TinyXML对象被销毁时,它使用的内存将不会被重用.我使用过我在其他项目中使用的内存泄漏检测器,并且已经手动逐步执行代码并且无法找到任何内存泄漏,因此我不怀疑泄漏的内存是问题所在.
此代码将重现该问题:
#include <iostream>
#include <tinyxml.h>
int main()
{
char* filename = "../LargeFile.xml";
{
TiXmlDocument targetDoc( filename );
targetDoc.LoadFile();
}
char* buf = new char[ 524288000 ];
delete [] buf;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用地址空间监视器我可以看到,在LoadFile()
有一大块红色后,然后targetDoc
被破坏后它全部变黄.然后,当分配最终的char buf时,它显示为红色,但是在绿色空间的顶部,而不是从TinyXML中释放的黄色.如果尝试分配比绿色地址空间更多的缓冲区,应用程序将崩溃(内存不足).这可以在下面的图像中看到.
根据地址空间监视器页面"自由地址空间以绿色显示,保留地址以黄色显示,已使用(已提交)内存区域以红色显示"因此,根据地址空间监视器,为什么TinyXML释放的内存保持"保留"状态.什么可能导致这种情况发生,我该如何阻止它?
编辑:
"你在分配大缓冲区吗?如果是这样,那么黄色空间中可能存在内存碎片,并且无法分配大的连续缓冲区"
但是很好的问题表明TinyXML存在内存泄漏,我的工具都没有显示出来.
UPDATE
我做了循环,无休止地分配整数,最终似乎使用了所有的黄色空间.但是,更大的分配不使用它.这向我表明,在通过tinyXML解析xml文件期间,堆中出现了一些小漏洞,这些漏洞以一种方式对堆进行分段,使得只有小到足以容纳漏洞的对象才能在黄色空间中分配.所以我在TinyXML中搜索越来越长的漏洞,但仍未找到任何漏洞.一切似乎都得到了正确的释放,这让我回到了最初的困惑状态.
我无法解释这个问题.
归档时间: |
|
查看次数: |
636 次 |
最近记录: |