Работа с большими файлами
От: 777777w  
Дата: 21.05.11 12:09
Оценка:
Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.
Re: Работа с большими файлами
От: MasterZiv СССР  
Дата: 21.05.11 14:26
Оценка: :)
On 21.05.2011 16:09, 777777w wrote:

> огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл

> такой большой, что для его адресации требуется больше 32 битов, то при помещении
> его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или
> может я что-то проспал и придумали какие-то виртуальные указатели? Что делать?

Конечно же, придумали. 64-битный указатель сжимается алгоритами сжатия до
32 бит, и всё работает.
Такчто непарься!
Posted via RSDN NNTP Server 2.1 beta
Re: Работа с большими файлами
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.05.11 14:29
Оценка:
Здравствуйте, 777777w, Вы писали:

7>Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.


Если вы не собираетесь файл целиком затащить в память, то совершенно не обязательно, чтобы объем памяти был сравнимым с размером файла. Но разумеется, если вы файл собираетесь прочитать и держать в памяти целиком, памяти вам понадобится немерянное количество.
Re: Работа с большими файлами
От: MegaMozg Россия  
Дата: 21.05.11 14:41
Оценка: :)
Здравствуйте, 777777w, Вы писали:

7>Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.


SetFilePointer это должно помочь
Re[2]: Работа с большими файлами
От: 777777w  
Дата: 21.05.11 15:51
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Если вы не собираетесь файл целиком затащить в память


Если бы не собирался, вопросов бы не было. Просто до этого самые большие файлы были в несколько сот мегабайт, поэтому проблем не возникало. Но оказалось, что они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть программу и написать целиком другую.
Re[3]: Работа с большими файлами
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.05.11 16:01
Оценка:
Здравствуйте, 777777w, Вы писали:

7>Если бы не собирался, вопросов бы не было. Просто до этого самые большие файлы были в несколько сот мегабайт, поэтому проблем не возникало. Но оказалось, что они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть программу и написать целиком другую.


Ну невозможно засунуть в память N гигабайт, не засовывая при этом в память N гигабайт

Значит, у вас вариантов ровно два: либо поменять алгоритм таким образом, чтобы он не требовал держать все данные в памяти, либо порейти на 64-битную платформу и использовать тучу памяти.
Re[4]: Работа с большими файлами
От: Pavel Dvorkin Россия  
Дата: 21.05.11 16:07
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Значит, у вас вариантов ровно два: либо поменять алгоритм таким образом, чтобы он не требовал держать все данные в памяти, либо порейти на 64-битную платформу и использовать тучу памяти.


Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.
With best regards
Pavel Dvorkin
Re[5]: Работа с большими файлами
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.05.11 16:23
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.


Че такое AWE?
Re[6]: Работа с большими файлами
От: Pavel Dvorkin Россия  
Дата: 21.05.11 16:30
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.


Pzz>Че такое AWE?


VirtualAlloc/MEM_PHYSICAL и далее по ссылкам
With best regards
Pavel Dvorkin
Re[3]: Работа с большими файлами
От: MasterZiv СССР  
Дата: 21.05.11 16:53
Оценка:
On 21.05.2011 19:51, 777777w wrote:

> они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать

> что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть
> программу и написать целиком другую.

Выкидывай, переписывай.

По секрету скажу: файлы вообще-то для того и придумали, чтобы хранить то,
что в память не влазит. Если бы всё влазило в память, файлы были бы не нужны.
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Работа с большими файлами
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.05.11 16:54
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

Pzz>>Че такое AWE?


PD>VirtualAlloc/MEM_PHYSICAL и далее по ссылкам


Можно и прям по файлу окном ползать, заммапив его. Только я сомневаюсь, что это удастся сделать, не перелопатив до неузнаваемости изначальный алкогоритм
Re[4]: Работа с большими файлами
От: const_volatile  
Дата: 21.05.11 19:32
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>По секрету скажу: файлы вообще-то для того и придумали, чтобы хранить то,

MZ>что в память не влазит. Если бы всё влазило в память, файлы были бы не нужны.

эх, интересно, доведёт ли Завалишин свой фантом до ума в обозримом будущем...
Re[5]: Работа с большими файлами
От: MasterZiv СССР  
Дата: 22.05.11 10:47
Оценка:
On 21.05.2011 23:32, const_volatile wrote:

> эх, интересно, доведёт ли Завалишин свой фантом


Да на самом-то деле уже по факту давно такие ОС есть.
Хоть WinMobile взять, хоть Symbian.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Работа с большими файлами
От: BulatZiganshin  
Дата: 22.05.11 11:13
Оценка: +1
Здравствуйте, const_volatile, Вы писали:

_>эх, интересно, доведёт ли Завалишин свой фантом до ума в обозримом будущем...


memory-mapped files существуют уже 100500 лет. вот только в 32 бита 10-гиговый файл ты не отмаппишь, будь ты даже буддой завалишиным
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Работа с большими файлами
От: const_volatile  
Дата: 22.05.11 12:08
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, const_volatile, Вы писали:


_>>эх, интересно, доведёт ли Завалишин свой фантом до ума в обозримом будущем...

BZ>memory-mapped files существуют уже 100500 лет. вот только в 32 бита 10-гиговый файл ты не отмаппишь, будь ты даже буддой завалишиным

я неправ скорее в том, что моя реплика является оффтопиком, она относится не к теме топик-стартера, а к фразе, разделяющей понятия физической памяти и файла. про битность Завалишин говорил, что они ориентируются на 64-битные платформы, а 32-битные только если embedded. не скрою, мне нравится его начинание, но я склоняюсь всё-таки к мысли, что "не взлетит", хотя идея сама по себе красивая.
Re[3]: Работа с большими файлами
От: Vzhyk  
Дата: 23.05.11 16:22
Оценка:
21.05.2011 18:51, 777777w пишет:

> Но это значит выкинуть программу и написать целиком другую.

Это самое разумное решение.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.