Ассемблер для Windows

Пример программы с выделением динамической памяти



Рисунок 3.6.4. Пример программы с выделением динамической памяти.

Трансляция программы на Рисунок 3.6.4.

MASM32:

ML /С /coff /DMASM MEM.ASM LINK /SUBSYSTEM:CONSOLE MEM.OBJ

TASM32:

TASM32 /ml MEM.ASM TLINK32 -ap MEM.OBJ

Операционная система Windows предоставляет также группу функций, осуществляющих управление виртуальной памятью. Основной функцией этой группы является функция VirtualAlloc. Вот параметры этой функции:

  • 1-й параметр. Адрес блока памяти для резервирования или передачи ему физической памяти.
  • 2-й параметр. Размер блока.
  • 3-й параметр. Может быть равен MEM_RESERVE - для резервирования блока, или MEM_COMMIT - для резервирования и передачи ему физической памяти.
  • 4-й параметр. Определяет уровень защиты блока. Он может быть, например, равен PAGE_READONLY или PAGE_READWRITE, или другой константе, определенной в документации Windows.
  • Возвращает функция виртуальный адрес блока памяти.
  • Суть данной функции заключается в том, что Вы можете зарезервировать блок памяти, который не спроецирован на физическую память, а затем сделать так, чтобы этот блок (или часть его) был спроецирован на физическую память. После чего этот блок памяти можно уже использовать.

    Другая функция, VirtualFree, может освобождать блоки, задействованные функцией VirtualAlloc. Первым параметром этой функции является адрес блока. Вторым параметром функции является размер освобождаемого блока. Третий параметр функции может принимать значение МЕМ_DЕСОММIТ либо значение MEM_RELEASE. В первом случае блок (или его часть) перестает быть отображаемым. Во втором случае весь блок перестает быть зарезервированным. При этом значении второй параметр обязательно должен быть равен нулю.



    Содержание раздела