Приложение падает, когда QList становится слишком большим - PullRequest
1 голос
/ 08 июля 2010

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

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

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

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

1 Ответ

4 голосов
/ 08 июля 2010

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

...