﻿Dynamic Memory Manager V1.01
(c) Barmaley 1995

   Менеджер динамической памяти. Функ-
ции:
IDMM - инициализация кучи с заданием ра-
       змера;
MALLOC - захват памяти;
DISPOS - освобождение памяти.

   Во многих программах часто бывает не-
обходимость временно попользоваться па-
рой килобайт памяти (для буфера, напри-
мер, обмена с диском). Статически резе-
рвировать место для буферов не выгодно:
почти всё время память не используется.
Модуль DMM обеспечивает управление вре-
менными областями памяти. DMM - менеджер
кучи - есть такой термин.
   В начале работы под динамическую па-
мять отводится определённая область.
Затем программа обращается к DMM, когда
ей потребовалась память для буфера. DMM
сообщает программе, с какого адреса мо-
жно пользоваться запрошенным количеством
байт. Когда буфер уже не нужен, DMM
открепляет нужную область памяти, кото-
рая может впоследствии захвачена для
других нужд.

   Обращение к DMM:

IDMM - инициализация кучи.
<HL - адрес кучи;
<BC - размер кучи.
   В куче резервируется 512 байт для
хранения адресов и длин свободных бло-
ков. Поэтому размер кучи не может быть
меньше 512 байт.

MALLOC - запрос памяти.
<BC - число нужных байт.
>HL - адрес, с которого они находятся.
   На каждый захваченный блок прихо-
дится 2 байта лишней информации, кото-
рые сохраняются прямо в блоке. Поэтому
если блоков много, то их общий размер
(предельный) может быть меньше размера
общей свободной области кучи.
   Если на куче нет свободной области
требуемого или большего размера, то DMM
вываливается в SYSERR.

DISPOS - освобождение памяти.
<HL - адрес области.
   Область, захваченная с этого адреса,
объявляется свободной и может впослед-
ствии быть захвачена для других нужд.
Свободных блоков, если они не прилегают
друг к другу, не может быть больше 256.
Если это не так, DMM вызывает SYSERR.
Практически, поскольку под адреса и дли-
ны свободных блоков выделено 512, а не
1024 байт (ошибка программы), то если
их число превысит 128, то будут самые
печальные последствия, гораздо хуже, чем
даже SYSERR.

#################################################################
