2010-07-08 367 views
1

我做了一个应用程序,它必须在内存中存储大量数据以提高计算性能。当QList变得太大时,应用程序崩溃

它是顶级对象为QList<myObject*>的列表和对象的层次结构。加载数据时,会创建大量new myObject*实例并将其添加到列表中。内存消耗增加,当涉及〜1.9Gb时,程序崩溃。我的电脑(Vista)拥有4Gb RAM,并且我已经在其他电脑上使用较少的RAM(XP)进行测试,并且在同一时刻崩溃。我可以不使用超过1.9Gb的RAM吗?

当一个较小的文件被加载和根据“Windows任务管理器”的内存使用情况是(比如说)1.2Gb我可以使用这些数据。但是如果我想加载另一个文件,即使在所有对象上调用delete并清除列表后,增长率都会从1.2Gb开始增长。为什么?
我试图切换到QVector并致电squeeze(),但内存保持不变。我已经阅读了关于QLists中动态内存分配的其他线程,但是在加载新文件之前是否真的无法重置内存?特别是因为它在1.9Gb之后崩溃;按顺序加载3个小文件,我在那里。

非常感谢您的任何建议。

+0

你确定删除对象吗?检查你的对象的析构函数。尝试cppcheck http://sourceforge.net/projects/cppcheck/它可以检测到一些内存泄漏。 – 2010-07-08 15:04:38

回答

4

如果您有32位Windows,那么您的进程只能使用2 GB的内存。你只能用32位来解决更多的内存问题。如果您需要更多内存,也许应该更改为64位Windows。

+0

为了记录,在64位Windows上,32位进程最多可以使用4 GB的内存。 – 2010-07-09 07:22:37