Добрый день
И вообще всякие фотошопы как с файлом 40000 на 30000 справляются?
Базовая техника одна. Никто не держит изображение в RAM целиком. Файл распаковывается во временный файл (или в общий swap файл) "по страницам" (по tile, по квадратикам - называйте как хотите). В памяти хранится "карта" страниц
struct CImagePage {
CImagePage * mPrev; // prev page in list
CImagePage * mNext; // next page in list
long long mFilePos; // file position
void * mPixels; // pixels or NULL for purged page
bool mDirty; // page has been modofied
...
};
Загруженные страницы хранятся в списке 1, не загруженные - в списке 2. Если затребованная страница не загружена, она
загружается и переносится в голову списка 1. Если длина списка 1 превышает заданную, страница в хвосте списка 1 выгружается и переносится в список 2 . Счетчик "не больше N страниц в памяти" определяет скорость/расход памяти