Средства разработки приложений


Операционная система PalmOS для программиста - часть 3


Размеры Dynamic Heap и Storage Heap определяются операционной системой при инициализации и зависят от общего размера памяти в КПК. Обычно размер Dynamic Heap 32-256Кб. Работать с Памятью можно через API модуля Memory Manager. Этот модуль поддерживает всю внутреннюю структуру памяти, его используют все остальные модули.

Основные API функции модуля Memory Manager:

MemPtr MemPtrNew (UInt32 size)

выделить блок памяти и получить указатель на него

MemHandle MemHandleNew (UInt32 )

выделить блок памяти и получить его дескриптор (handle)

MemPtr MemHandleLock (MemHandle)

получить указатель на блок памяти от его дескриптора т.е. “заблокировать” дескриптор.

Err MemHandleUnLock (MemHandle)

“разблокировать” дескриптор, указатель от дескриптора уже недействующий.

Err MemHandleFree (MemHandle)

Освободить память

Err MemPtrFree (MemPtr)

Освободить память

Если приложение запросит слишком большой блок памяти, а доступны будут только маленькие блоки, то PalmOS произведет фоновую дефрагментацию памяти, при этом из-за перемещения существующих блоков, изменятся их базовые указатели. Чтобы изменение указателей не повлияло на приложение - существуют дескрипторы (handle) это указатель на указатель блока. Дескриптор это такой же указатель на память, но для того чтобы начать работать с этим блоком необходимо его “заблокировать” т.е. получить указатель который будет оставаться действительным, даже если произойдет фоновая дефрагментация памяти.

Если приложение выделяет память, не используя дескриптор (MemPtrNew), либо получает указатель от дескриптора, т.е. “блокирует” его (MemHandleLock), то PalmOS не будет перемещать такой блок при дефрагментации.

Не смотря на то что механизм дескрипторов сложнее чем просто работа с указателями , избежать его нельзя т.к. многие функции API Системных Модулей работают с дескрипторами. т.е. следует заранее позаботится о том чтобы большие блоки данных в программе были представлены в виде дескрипторов. Для блока памяти также есть такое понятие как LocalID – специальный номер, по которому можно узнать в какой памяти и на какой карте памяти находится блок памяти.




Начало  Назад  Вперед



Книжный магазин