Название: QImage: out of memory, returning null image [Решено] Отправлено: Torvald от Июнь 30, 2017, 14:41 Windows 7 x64, приложение скомпилено MinGW 5.3 x32.
Открываю диспетчер задач - смотрю потребление памяти. Оно не превышает 1.5гб в пике, но тем не менее в определенный момент приложение вылетает с ошибкой QImage: out of memory, returning null image Приложение - графический редактор, само изображение имеет размер 6000х4000 Название: Re: QImage: out of memory, returning null image Отправлено: Apktyc от Июнь 30, 2017, 15:09 Используйте для сборки
Код Это слегка отсрочит окончание памяти. А так, наверное нужен свой алокатор. Название: Re: QImage: out of memory, returning null image Отправлено: Torvald от Июнь 30, 2017, 15:13 Спасибо, еще я кажется понял одну вещь.
Для 32-битного приложение ограничение статической памяти и динамической - по 2 гигабайта, то есть всего 4. Изображения, естественно, находятся в динамической памяти. Диспетчер задач не позволяет просмотреть пик потребления памяти, например при вычислениях, потребление памяти может на доли секунды возрастать на несколько сотен мегабайт. Отсюда и вылеты. Название: Re: QImage: out of memory, returning null image Отправлено: Apktyc от Июнь 30, 2017, 15:47 Для 32-битного приложение ограничение статической памяти и динамической - по 2 гигабайта, то есть всего 4. Ну, стек на 2 ГБ - это вы конечно круто замахнулись ;D По-умолчанию он наверное мегабайта 2. А вот чтобы адресовать в куче (для х86) сверх 2 ГБ и нужны флаги выше. Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Авварон от Июнь 30, 2017, 15:49 QImage не позволяет хранить очень большие изображения, вот тут https://github.com/qt/qtbase/blob/dev/src/gui/image/qimage.cpp#L130 проверка на то, что оно влезет. Лень высчитывать, влезет ли ваше изображение.
Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Torvald от Июнь 30, 2017, 15:51 да да, влезает. Еслиб не влезало - упало бы сразу.
Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Apktyc от Июнь 30, 2017, 16:00 Ограничение QImage 32767x32767
Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Igors от Июнь 30, 2017, 16:01 само изображение имеет размер 6000х4000 Ну это всего лишь 96 Мb, до полутора гектаров еще далеко. А вообще некоторые ОС не выделяют слишком большие куски (> 1 Gb) даже если эта память имеется и даже в 64-бит Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Torvald от Июнь 30, 2017, 16:09 96 мб, да, но это графический редактор, там еще полно всякого - для оптимизации создается много дополнительных буферов с промежуточными вычислениями размером с оригинальное изображение. Для аналогии могу привести лайтрум - там, одно только открытие подобного изображения, увеличивает потребление памяти на 800мб. Но в лайтруме, конечно, свой менеджер памяти, это я так, для сравнения.
Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Apktyc от Июнь 30, 2017, 16:15 Проблема что это 96 МБ одним куском. Так что, увеличение кучи лишь отсрочка.
Название: Re: QImage: out of memory, returning null image [Решено] Отправлено: Igors от Июль 01, 2017, 11:24 96 мб, да, но это графический редактор, там еще полно всякого - для оптимизации создается много дополнительных буферов с промежуточными вычислениями размером с оригинальное изображение. Для аналогии могу привести лайтрум - там, одно только открытие подобного изображения, увеличивает потребление памяти на 800мб. Но в лайтруме, конечно, свой менеджер памяти, это я так, для сравнения. Разбазаривание памяти (и ресурсов вообще) - чисто проблема программиста. Придется пересмотреть подход (и это правильно).Проблема что это 96 МБ одним куском. Так что, увеличение кучи лишь отсрочка. Такие блоки выделялись без проблем еще на древнем XPНазвание: Re: QImage: out of memory, returning null image [Решено] Отправлено: Old от Июль 01, 2017, 12:11 А вообще некоторые ОС не выделяют слишком большие куски (> 1 Gb) даже если эта память имеется и даже в 64-бит Неужели. Сможете назвать хоть одну? |