Каким размером должен быть буфер у проги которая хэширует файл

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 12 мар 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Вобщем задался изучить программирования с исползованием fasm. В качестве задачи выбрал реализовать хэширование файла.

    В чем заговоздка, файл будет не более 4Гб! Точное число это макс.число умещающееся в 32 бита!

    Проецировать файл размером 3Гб о-го-го! значит открывать и считвать его данные, но куда? Правильно в буфер.



    Каков должен быть размер данного буфера?



    Почему не могу определиться:

    1. Выделить большой не рационально испоьзовать память

    2. Маленький буфер, слишком много циклов при обработке больших файлов



    Совет от PolASoft использватать 4Кб на буфер вполне логичен, но может быть все таке есть решение дающее однозначный ответ на этот вопрос?
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Поясни, зачем тебе нужно хэшировать такие здоровые файлы? Может проще считать хэш-функции начального куска (надо только его размер выбрать)? Ведь я так понимаю, чем длиннее файл, тем он уникальнее...
     
  3. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    :derisive:

    1. Пытаемся создать модель с функцией полезности, максимум которой будем достигать.

    2. Обнаруживаем, что количественной меры для фразы "нерационально использовать память" нет.

    3. Задумываемся над этим фактом и осознаем, что для загруженного под завязку ОЗУ на компьютере со 128 Мб и для простаивающего 1 Гб ОЗУ рациональной длиной буфера будет разная величина.

    4. Хочешь ли ты озабочиваться получением объема ОЗУ и доли свободного места в ней при каждом запуске программы ? Наверное - нет.

    5. Тогда выбери какое-нибудь не слишком маленькое и не слишком большое значение, и забудь о своей проблеме.



    А если по делу - я обычно беру 16 кб для подобных вещей (хеширование, блочное шифрование и т.п.).
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    crypto

    Не буду говорить почему, просто надо! Целиком!!! А не часть файла!



    OLS

    Спасибо!
     
  5. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    EvilsInterrupt

    leo мне как-то говорил, что смысла создавать буфер размером более 64Kb нет, и он прав. Имненно при таком размере буфера достигается макс. производительность.
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Еще бы Edmond че нить сказал бы, внес бы свои 5 коп.
     
  7. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Мнда... а что далать, если нужно обрабатывать большое файлы(2Гб к примеру) целиком?

    Ведь бывают же такие ситуации...
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    При выборе размера надо еще учесть:

    1. Размер буфера упреждающего чтения операционки (если таковой поддерживается)

    2. Размер буфера, используемого в реализациях функции чтения на разных языках программирования

    3. Особенности кэширования данных на компьютере
     
  9. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    OlegA11

    Некоторые серверные версии винды потдерживают до 64Gb памяти. Видимо там это можно сделать без проблем. Это что касается 32bit'ных Windows.
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Интересно, а что можно сделать с 2Гб файлом целиком, распечатать в хекс виде на эран? :)
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    S_T_A_S_

    распечатать в хекс виде на эран? :)



    Тяжеловато просмотреть около миллиона экранов (80 х 25 символов) :)
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
  13. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    EvilsInterrupt

    если не мапить, сколько ты времени потратишь на пересчет своего файла, не забывай, что проще это сделать через мап, поскольку все что для этого необходима за тебя плдумает ос, почитай лучше Руссиновича главы о памяти и файловых системах, сам всё поймешь
     
  14. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Я вот тута задумался еще вот над чем, если проецировать, то с помощью MapViewOfFile я получу указатель на область.



    Учитывая факт что данные надо еще подготовить, а это тпроцесс заключается в их дополнении в конце и именуется он словом padding соглассно доке FIPS180-2.



    Вот и подумал а можно ли данные разбить на 2 региона? так сказать, если поделить основную часть на n байт то это pMem1, а конечные m байт данных это pMem2, причем так чтобы в этом регионе еще бы добавилось в конце k байт указанных мною!



    Пока я это делаю так:

    работаю с n байт, а m байт копирую в другой буфер, дополняю и обрабатываю, но это слишком, на мой взгляд, не удобно.



    Есть ли способ лучше?
     
  15. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    CARDINAL

    Громадный респект за совет, я почитал и понял. свою dll тебе первому вышлю, чтобы твой взор первым глянул, а если найду тебя в базе по асям и мылам :)))
     
  16. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia


    Глянь, например, RFC1320/1321 и посмотри как там реализованы MD4/MD5. Тебе совсем не обязательно чтобы блоки данных располагались в памяти непрерывно; тебе также абсолютно не нужно дописывать в конец данных padding...
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    flankerx

    Я обязательно гляну, то что ты предложил. Но пока передо мной FIPS180-2 и открыта она на стр.12. Там то и сказано,что данные "5.1 Padding the Messaage", было бы неплохо для собрания прояснить то, что ты хотел сказать.



    зы:

    Глянул, тут:

    http://www.protocols.ru/modules.php?name=Downloads&l_op=getit&lid=183

    http://www.protocols.ru/modules.php?name=Downloads&l_op=getit&lid=182



    И в обоих сказано, что добавлять надо и этот алгоритм подобен SHA-256!
     
  18. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    EvilsInterrupt

    Да, padding нужен...

    Но ты все же глянь в указанные RFC на предмет того, как его можно добавить без каких-либо сложных извращений (см. собственное сообщение от Мар 18, 2006 11:42:24)...
     
  19. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А в чем проблема с дополнением? Всего-то нужен буфер 128 байт, и скопировать последний кусов в него... Можно и без буфера, но сложность возрастет, а скорость упадет =)
     
  20. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    S_T_A_S_

    Именно так щас и делаю! блин, но привык как то уж по тупому на пролом парсить подряд идущие байты!



    Вот пока не прочитаю то что сказал Cardonala окончательно не определюсь чего надо делать лучше! А пока ставлю LiveKD :))