Название: Проецирование файла в память Отправлено: spectr_yury от Октябрь 22, 2010, 14:37 Добрый день! Возникла потребность работы с большими изображениями (1Гб и больше). Пользуюсь функцией:
Код: uchar * QFile::map ( qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions ) Название: Re: Проецирование файла в память Отправлено: Igors от Октябрь 22, 2010, 16:51 Вероятно никак, т.к. ОС имеет ограничение на размер выделяемого блока. Напр. я не смог выделить блок более 1 Гб (хотя физически имеется 4). Хотя потом я нашел способ это сделать (vm_allocate), пришлось разлюбить такие длинные сказки :)
Название: Re: Проецирование файла в память Отправлено: xokc от Октябрь 24, 2010, 22:11 Использовать 64 битную ось. Или забыть про такую технику программирования для файлов > 2 ГБ (при некоторых танцев с бубном можно добиться и 3 ГБ).
Название: Re: Проецирование файла в память Отправлено: Igors от Октябрь 25, 2010, 09:10 Использовать 64 битную ось. Или забыть про такую технику программирования для файлов > 2 ГБ (при некоторых танцев с бубном можно добиться и 3 ГБ). 64 бит ничего в этом смысле не меняет, слишком большой блок все равно не выделяется (по крайней мере на моей оси). Мне пришлось довольно много переделывать чтобы избавиться от таких выделений, но др. способа я не нашел.Название: Re: Проецирование файла в память Отправлено: BRE от Октябрь 25, 2010, 13:11 64 бит ничего в этом смысле не меняет, слишком большой блок все равно не выделяется (по крайней мере на моей оси). Мне пришлось довольно много переделывать чтобы избавиться от таких выделений, но др. способа я не нашел. А что была за ось?Проверил у себя в linux x86_64, спокойно мапятся образы жестких дисков VirtualBox размером 7 - 10 Gb, не говоря о DVD-образах. Название: Re: Проецирование файла в память Отправлено: Igors от Октябрь 25, 2010, 14:30 А что была за ось? OSX 10.5.8Проверил у себя в linux x86_64, спокойно мапятся образы жестких дисков VirtualBox размером 7 - 10 Gb, не говоря о DVD-образах. Edit: чтобы не было путаницы: я говорю о выделении блока, (это строго говоря не то же самое что мапить файл). Больше 1 Gb - new, malloc возвращают 0. Можно выделить через vm_allocate (нативняк) но затем попытки изменить размер такого блока ни к чему не ведут. На Windows XP64 проверял бегло, но ситуация выглядит той же. Простой тест в Qt - масштабировать картинку. Когда размер превысит 1 Gb - вылет. Название: Re: Проецирование файла в память Отправлено: BRE от Октябрь 25, 2010, 15:55 Edit: чтобы не было путаницы: я говорю о выделении блока, (это строго говоря не то же самое что мапить файл). Больше 1 Gb - new, malloc возвращают 0. Можно выделить через vm_allocate (нативняк) но затем попытки изменить размер такого блока ни к чему не ведут. На Windows XP64 проверял бегло, но ситуация выглядит той же. Простой тест в Qt - масштабировать картинку. Когда размер превысит 1 Gb - вылет. Странно все это. В 64-битном линуксе все выделяется без проблем. Хочешь 2 Гб, хочешь 10. |