пытаюсь чтать файл так ;------------------------------------------------------ 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" Как прочитать больошой файл?
Buff попадает в секцию инициализированных данных. Нужно его переместить в секцию с неициализироваными данными, а то размер скомпилированного файла будет больше Buff_SIZE. В случаях чтения файлов обычно используется динамически-выделяемая память. Используй LocalAlloc, GlobalAlloc, HeapAlloc, VirtualAlloc.
dr_dred По коду этого не видно. Не сбивай с толку народ старыми функциями. assorted По ходу, у тебя не 10000000 (9.5 мб), а 10000000h (256 мб), т.к. 9 мб для буфера мелочи. Но при файле в пару гиг и 256 мб не поможет. Читай файл поблочно, да и блок для скорости лучше делать небольшим (64-128 кб).