2010-07-08 3 views
1

Я делаю приложение, которое должно хранить много данных в памяти, чтобы улучшить производительность вычислений.Приложение падает, когда QList слишком сильно растет

Это иерархия списков и объектов, где верхний объект является QList<myObject*>. При загрузке данных создается множество экземпляров new myObject* и добавляется в список. Потребление памяти растет, и когда дело доходит до ~ 1.9 Гбит, программа вылетает из строя. Мой компьютер (Vista) имеет 4Gb RAM, и я протестировал его на других компьютерах с меньшим объемом оперативной памяти (XP), и он сбой в той же точке. Могу ли я использовать более 1,9 ГБ оперативной памяти?

Когда загружен файл меньшего размера и использование памяти в соответствии с «Диспетчером задач Windows» (скажем) 1.2Gb, я могу работать с данными. Но если я хочу загрузить другой файл, рост начинается с 1.2Gb даже после вызова delete на всех объектах и ​​очистки списка. Зачем?
Я попытался переключиться на QVector и позвонил squeeze(), но память остается неизменной. Я прочитал другие темы здесь о динамическом распределении памяти в QLists, но действительно ли это не способ сбросить память, прежде чем загружать новый файл? Тем более, что он падает после 1.9Gb; загружая 3 небольших файла последовательно, и я там.

Большое спасибо за любые предложения.

+0

Вы уверены, что вы удалите объект? Проверьте деструктор вашего объекта. Попробуйте cppcheck http://sourceforge.net/projects/cppcheck/ Он может обнаружить некоторые утечки памяти. – 2010-07-08 15:04:38

ответ

4

Если у вас 32-разрядная Windows, тогда ваш процесс может использовать только 2 ГБ памяти. Вы просто не можете адресовать больше памяти с 32 битами. Если вам нужно больше памяти, возможно, вам стоит перейти на 64-битную Windows.

+0

Для записи на 64-битной Windows 32-разрядные процессы могут использовать не более 4 ГБ памяти. –