При работе с большими блоками данных повисает ML.EXE

Тема в разделе "WASM.WIN32", создана пользователем drmist, 7 дек 2005.

  1. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Пишу сортировщик текстовых файлов большого размера.

    Для чтения файла отвожу ему буфер размером 20 Метров.



    READ_BUFFER_SIZE equ 01400000h ; 20 Mb оперативки

    ReadBuff db READ_BUFFER_SIZE dup (?)



    Изврат конечно, но explorer.exe жрет примерно столько же, почему бы и нет?



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

    То есть если его размер 1Mb - компилятор работает секунд 10, а если 20Mb - то повисает хрен знает на сколько - я так и не дождался.



    Я так чувствую, что компилятор пытается проэмулировать работу будущей программы и найти в ней ошибки.

    Или может еще чем занимается - х3.



    Может есть ключик (/Zs не спасет), чтобы компиляция проходила быстрее, или другой способ сберечь время?

    Почему-то очень не хочется выделять память динамически.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Известный баг.

    Нет смысла выделять статическую память такого большого размера. Используй динамическую память (VirtualAlloc).
     
  3. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    ((((

    Видимо придется

    а известно, из-за чего так?
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    юзай fasm, там этого бага точно нет
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898


    может выделить этот буфер в отдельный *asm, скомпилировать единожды в *o, и потом просто компоновать с остальными модулями?
     
  6. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    r90

    Возможно, но мне показалось наиболее дешевым и сердитым использовать GlobalAlloc.

    Вот интересно, на много это замедлит сортировщик? Ведь в нем каждый такт дорог.
     
  7. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Хотя, учитывая что он GUI, можно уже не экономить на 1-2 лишних минутах.

    Всем спасибо.
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    drmist



    А "статическая" память выделяется тем же VirtualAlloc. Точно так же и ты выдели 1 раз. А вот GlobalAlloc и правда может замедлить :)
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    А если вдруг понадобится буфер на 21 Мб?

    Опять полчаса компилировать объектник?

    :)))

    имхо, самое разумное решение - virtualalloc.

    Да и GUI здесь по барабану.