07 June 2012

Размер имеет значение

По-моему, я не встречал ни одного приложения diff под Windows, которое бы при сравнении файлов пыталось бы сделать что-то отличное от "оба файла целиком замэпить в память, получить на них указатели и сравнивать данные через них".

В принципе, если вы писали такого рода код лет десять назад, это было отличное решение -- простое, надежное и безгеморрное. Сегодня, во времена смены эпох, перехода с 32-х бит на 64 это становится проблемой. На 64 бита мигрировали далеко не все, а вот винтов почти у каждого стоит минимум на терабайт. И на этих бескрайних просторах наверняка валяется множество больших файлов, парочку из которых замэпить в несчастные 4 гига виртуального пространства оказывается совершенно невозможным.


Что же делать авторам программ, чтобы исправить эту проблему?
Понятно, можно сделать билд под 64 бита, но для пользователей старых ОС проблема останется.

Можно использовать мэпинг частей файлов, но счастья, думаю, это не прибавит -- алгоритмы анализа придется существенно переписывать и усложнять. Сегодня это космические технологии, а еще не так давно (во время MS-DOS) такими путями решалось множество прикладных задач -- спасибо 640K "которых хватит всем" и фирме Intel за ебическую сегментную модель процессора 8086 (уверен, человек, который ее придумал якобы для облегчения совместимости с 8080, будет гореть в Аду).

Можно написать свой механизм подгрузки частей файлов и обернуть это все в прозрачный указатель особого типа, который семантически будет вести себя как обычный указатель. В обычные алгоритмы его, конечно, не засунешь, но в алгоритмы типа как в STL -- легко! Это будет довольно красивое решение, правда по производительности потери будут существенные -- даже со всеми оптимизациями разыменовывание такого указателя  будет в разы медленнее разыменовывания, которое делается на уровне CPU...

Вообще интересно жить при работающем законе Мура -- еще вчера 8 Мб RAM это было ОЧЕНЬ много, а сегодня ты в смешанных чувствах смотришь на агонию 32-х разрядного режима на ПК и зубоскалишь по поводу того, как M$ щедро разбила в свое время все виртуальное пространство по схеме "два куска по 2 Гб".

зы. Попытаюсь "вернуться" и писать более менее регулярно. Для этого надо сделать всего лишь одну простую вещь -- постоянно душить в себе графомана, потому что на написание эпиков у меня сейчас катастрофически не хватает времени.

No comments:

Post a Comment