OUT OF MEMORY в FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем assorted, 24 окт 2006.

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    пытаюсь чтать файл так
    ;------------------------------------------------------
    Buff_SIZE = 1000000
    section '.code' code readable executable
    start:
    invoke CreateFile, FileName, GENERIC_READ,\
    FILE_SHARE_READ, 0, OPEN_EXISTING,\
    FILE_ATTRIBUTE_NORMAL, 0

    push eax
    invoke ReadFile, eax, Buff, Buff_SIZE, NumberOfBytesRead, NULL

    section '.data' readable writeable

    FileName db 'myfile.bin',0
    Buff rb Buff_SIZE
    NumberOfBytesRead dd ?
    ;-------------------------------------------------------

    все работает как нужно.....

    Но вот когда пытаюсь увеличить кол-во читаемых байт
    Buff_SIZE = 10000000
    Получаю сообщение компилятора мол "OUT OF MEMORY"

    Как прочитать больошой файл?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А если файл в гиг надо будет прочесть, будешь выделять гиг в буфере?
     
  3. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    701
    В настройках больше памяти кампилеру отдай
     
  4. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Buff попадает в секцию инициализированных данных. Нужно его переместить в секцию с неициализироваными данными, а то размер скомпилированного файла будет больше Buff_SIZE.
    В случаях чтения файлов обычно используется динамически-выделяемая память. Используй LocalAlloc, GlobalAlloc, HeapAlloc, VirtualAlloc.
     
  5. IceStudent

    IceStudent Active Member

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

    Не сбивай с толку народ старыми функциями.

    assorted
    По ходу, у тебя не 10000000 (9.5 мб), а 10000000h (256 мб), т.к. 9 мб для буфера мелочи.
    Но при файле в пару гиг и 256 мб не поможет. Читай файл поблочно, да и блок для скорости лучше делать небольшим (64-128 кб).