Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.
On 21.05.2011 16:09, 777777w wrote:
> огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл > такой большой, что для его адресации требуется больше 32 битов, то при помещении > его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или > может я что-то проспал и придумали какие-то виртуальные указатели? Что делать?
Конечно же, придумали. 64-битный указатель сжимается алгоритами сжатия до
32 бит, и всё работает.
Такчто непарься!
Здравствуйте, 777777w, Вы писали:
7>Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.
Если вы не собираетесь файл целиком затащить в память, то совершенно не обязательно, чтобы объем памяти был сравнимым с размером файла. Но разумеется, если вы файл собираетесь прочитать и держать в памяти целиком, памяти вам понадобится немерянное количество.
Здравствуйте, 777777w, Вы писали:
7>Казалось бы ничего сложного — указатель позиции файла LONGLONG позволяет читать какие угодно файлы. Читатем, разбираем структуру, и читаем файл в созданные в памяти объекты соответствующих классов. Однако через некоторое время программа вылетает из-за нехватки памяти. У меня ее хоть и 2 гига, но зато pagefile огромный, в чем же дело? Тут до меня начинает смутно доходить, что если файл такой большой, что для его адресации требуется больше 32 битов, то при помещении его в память тоже потребуется больше 32 бит. А указатели-то у нас 32-битные! Или может я что-то проспал и придумали какие-то виртуальные указатели? Что делать? 64-разрядную винду не предлагать, моя программа должна работать на XP.
Здравствуйте, Pzz, Вы писали:
Pzz>Если вы не собираетесь файл целиком затащить в память
Если бы не собирался, вопросов бы не было. Просто до этого самые большие файлы были в несколько сот мегабайт, поэтому проблем не возникало. Но оказалось, что они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть программу и написать целиком другую.
Здравствуйте, 777777w, Вы писали:
7>Если бы не собирался, вопросов бы не было. Просто до этого самые большие файлы были в несколько сот мегабайт, поэтому проблем не возникало. Но оказалось, что они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть программу и написать целиком другую.
Ну невозможно засунуть в память N гигабайт, не засовывая при этом в память N гигабайт
Значит, у вас вариантов ровно два: либо поменять алгоритм таким образом, чтобы он не требовал держать все данные в памяти, либо порейти на 64-битную платформу и использовать тучу памяти.
Здравствуйте, Pzz, Вы писали:
Pzz>Значит, у вас вариантов ровно два: либо поменять алгоритм таким образом, чтобы он не требовал держать все данные в памяти, либо порейти на 64-битную платформу и использовать тучу памяти.
Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Либо использовать AWE, но это едва ли проще, чем переписать программу, не говоря уж о том, что размещать и добираться к данным в AWE совсем не тривиально.
Pzz>Че такое AWE?
On 21.05.2011 19:51, 777777w wrote:
> они могут быть намного больше. Можно, конечно, поменять алгоритм, придумать > что-нибудь чтобы файл не считывался целиком в память. Но это значит выкинуть > программу и написать целиком другую.
Выкидывай, переписывай.
По секрету скажу: файлы вообще-то для того и придумали, чтобы хранить то,
что в память не влазит. Если бы всё влазило в память, файлы были бы не нужны.
Здравствуйте, Pavel Dvorkin, Вы писали:
Pzz>>Че такое AWE?
PD>VirtualAlloc/MEM_PHYSICAL и далее по ссылкам
Можно и прям по файлу окном ползать, заммапив его. Только я сомневаюсь, что это удастся сделать, не перелопатив до неузнаваемости изначальный алкогоритм
Здравствуйте, MasterZiv, Вы писали:
MZ>По секрету скажу: файлы вообще-то для того и придумали, чтобы хранить то, MZ>что в память не влазит. Если бы всё влазило в память, файлы были бы не нужны.
эх, интересно, доведёт ли Завалишин свой фантом до ума в обозримом будущем...
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, const_volatile, Вы писали:
_>>эх, интересно, доведёт ли Завалишин свой фантом до ума в обозримом будущем... BZ>memory-mapped files существуют уже 100500 лет. вот только в 32 бита 10-гиговый файл ты не отмаппишь, будь ты даже буддой завалишиным
я неправ скорее в том, что моя реплика является оффтопиком, она относится не к теме топик-стартера, а к фразе, разделяющей понятия физической памяти и файла. про битность Завалишин говорил, что они ориентируются на 64-битные платформы, а 32-битные только если embedded. не скрою, мне нравится его начинание, но я склоняюсь всё-таки к мысли, что "не взлетит", хотя идея сама по себе красивая.