Функции для выделения, перераспределения и освобождения памятиDelphi , Синтаксис , Память и УказателиФункции для выделения, перераспределения и освобождения памяти
Автор: Dimka Maslov { **** UBPFD *********** by delphibase.endimus.com **** >> Функции для выделения/перераспределения/освобождения памяти Модуль содержит функции для работы с блоками памяти. AllocateMem - выделяет блок памяти из Count записей по RecSize байт, возвращает адрес выделенного блока памяти в случае успеха или nil в случае ошибки. ReallocateMem - устанавливает новый размер блока памяти, выделенного функцией AllocateMem. В качестве параметра Pointer можт быть использован как типизированный так и нетипизированный указатель. DeallocateMem - освобождает память, выделенную функциями AllocateMem или ReallocateMem. В качестве параметра Pointer можт быть использован как типизированный так и нетипизированный указатель. MemSize - возвращает размер блока памяти, выделенного функциями AllocateMem или ReallocateMem. Зависимости: Windows Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург Copyright: Dimka Maslov Дата: 21 мая 2002 г. ***************************************************** } unit MemFuncs; uses Windows; interface function AllocateMem(Count: Integer; RecSize: Integer): Pointer; procedure ReallocateMem(var Pointer; Count: Integer; RecSize: Integer = 1); procedure DeallocateMem(var Pointer); function MemSize(P: Pointer): Integer; implementation function LocalHandle; external kernel32 name 'LocalHandle'; function AllocateMem(Count: Integer; RecSize: Integer = 1): Pointer; asm test eax, eax jle @@10 test edx, edx jle @@10 imul edx push eax push LHND call LocalAlloc push eax call LocalLock ret @@10: xor eax, eax end; procedure ReallocateMem(var Pointer; Count: Integer; RecSize: Integer = 1); asm push ebx mov ebx, eax mov eax, [ebx] test eax, eax jnz @@10 mov eax, edx mov edx, ecx call AllocateMem mov [ebx], eax pop ebx ret @@10: push ecx push edx push eax call LocalHandle pop edx pop ecx test eax, eax jnz @@20 pop ebx ret @@20: push eax mov eax, edx imul ecx mov edx, eax pop eax push LHND push edx push eax call LocalRealloc push eax call LocalLock mov [ebx], eax pop ebx end; procedure DeallocateMem(var Pointer); asm push ebx mov ebx, eax mov eax, [ebx] test eax, eax jz @@10 push eax call LocalHandle test eax, eax jz @@10 push eax push eax call LocalUnlock call LocalFree @@10: xor eax, eax mov [ebx], eax pop ebx end; function MemSize(P: Pointer): Integer; asm test eax, eax jnz @@10 ret @@10: push eax call LocalHandle test eax, eax jnz @@20 ret @@20: push eax call LocalSize end; end. Библиотека Delphi для управления памятью! Единица
Функции используют вызовы Windows API для взаимодействия с операционной системой в области управления памятью. Реализация использует inline-ассемблерный код для оптимизации производительности и обеспечения правильного деаллокирования памяти. Некоторые примечания к коду:
В целом, эта библиотека предлагает удобный и эффективный способ управления блоками памяти в приложениях Delphi, а также обеспечивает точное управление аллокацией и деаллокацией памяти. Модуль MemFuncs содержит функции для выделения, перераспределения и освобождения памяти в операционной системе Windows. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Память и Указатели ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |