и Storage Heap определяются операционной
Размеры 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 – специальный номер, по которому можно узнать в какой памяти и на какой карте памяти находится блок памяти.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий