【发布时间】:2011-03-13 08:50:56
【问题描述】:
我做了一个应用程序,它必须在内存中存储大量数据以提高计算性能。
它是列表和对象的层次结构,其中顶部对象是QList<<em>myObject*</em>>。加载数据时,会创建很多new myObject* 的实例并将其添加到列表中。内存消耗增加,当涉及到 ~1.9Gb 时,程序崩溃。我的电脑 (Vista) 有 4Gb RAM,我已经在其他 RAM (XP) 较少的电脑上进行了测试,但它同时崩溃了。我不能使用超过 1.9Gb 的 RAM 吗?
当加载较小的文件并且根据“Windows 任务管理器”的内存使用量为(例如)1.2Gb 时,我可以处理数据。但是,如果我想加载另一个文件,即使在所有对象上调用 delete 并清除列表后,也会从 1.2Gb 开始增长。为什么?
我尝试切换到QVector 并调用squeeze(),但内存保持不变。我已经阅读了关于 QLists 中动态内存分配的其他线程,但是在加载新文件之前真的没有办法重置内存吗?特别是因为它在 1.9Gb 之后崩溃;依次加载 3 个小文件,我就到了。
非常感谢您的任何建议。
【问题讨论】:
-
您确定您的对象删除有效吗?检查对象的析构函数。试试 cppcheck sourceforge.net/projects/cppcheck 可以检测到一些内存泄漏。
标签: qt dynamic-memory-allocation qlist