【发布时间】:2015-11-25 11:44:27
【问题描述】:
我正在使用带有 32 位 Visual Studio 2010 的 QT4.8。 我正在尝试在函数中更改 XML 文件的某些内容。函数的开头是这样的
QFile* myXmlFile;
QDomDocument myDom;
...
myDom.setContent(myXmlFile);
当 xml 文件小于 24 Mb 时,该函数可以正常工作。但是,当我的文件大于该文件时,程序会在上面的最后一行崩溃。我找到了similar question,但它说错误发生在 200Mb 之后,问题似乎有所不同。
我有 16 Gb 的内存,你几乎看不到内存使用的变化,所以这可能不是因为内存不足。
当我使用 try catch 块查看问题时,它说存在错误的分配异常。尽管计算机中有更多可用内存,但 QDomDocument 似乎无法分配超过 24 MB 的空间。我阅读了 QDomDocument 的 Qt 文档,但没有发现任何线索。
有没有办法让程序或 QDomDocument 对象使用更多内存,或者你认为这是一个不同的问题?
【问题讨论】:
-
如果文件是 24MB 并不意味着分配的 RAM 将是 24MB 它可能会更多,除了你的 exe 文件可能有最大 HEAP 限制,我相信你可以从 Visual工作室..msdn.microsoft.com/en-us/library/f90ybzkh%28v=vs.120%29.aspx
-
如果它立即崩溃或分配的内存非常大,则没有时间或没有机会查看 QDomDocument 的内存使用情况。另外:32bit默认只允许2GB...见stackoverflow.com/q/639540/3021018
-
它不会立即压碎,实际上它会在该行等待相当长的时间才会压碎。
-
如果您的 XML 包含许多小标签,则构建 dom 文档将花费更多时间,并且会消耗更多内存。 “相当长的时间”听起来像这样。
-
@Aaron 是的,它的小标签太多了。
标签: c++ qt memory heap-memory