![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Получение размера памяти выделенный под PointerDelphi , Синтаксис , Память и Указатели
Автор: Мироводин Дмитрий { **** UBPFD *********** by delphibase.endimus.com **** >> Функция возврящает количество байт выделенных под Pointer. Размер округляется в большую сторону до DWORD (4 байт). Зависимости: Windows Автор: Мироводин Дмитрий, mirovodin@mail.ru Copyright: Мироводин Дмитрий Дата: 16 октября 2003 г. ***************************************************** } function GetPointerSize(const P: Pointer): Integer; begin if P = nil then Result := -1 else Result := Integer(Pointer((Integer(p) - 4))^) and $7FFFFFFC - 4; end; Пример использования: var P: pointer; PSize: integer; begin GetMem(P, 1024); // Размер кратен 4 PSize := GetPointerSize(P); ShowMessage(inttostr(PSize)); // Результат 1024 байта FreeMem(P); end; ... var P: pointer; PSize: integer; begin // Размер НЕ КРАТЕН 4 GetMem(P, 6); PSize := GetPointerSize(P); // Результат 8 байта т.к. идет округление ShowMessage(inttostr(PSize)); FreeMem(P); end; Приведенный код-сниппет - это функция Delphi под именем Вот шаг за шагом, как функция работает:
Приведенные примеры демонстрируют, как использовать эту функцию:
Вот альтернативное решение с использованием встроенной функции Delphi
Эта реализация проще и более эффективна, чем оригинальный код. Однако она работает только с указателями и не обеспечивает такой же уровень настройки, как оригинальная функция. В целом, рекомендуется использовать встроенные функции Delphi, когда это возможно, потому что они часто оптимизированы для производительности и надежности. Функция GetPointerSize получает количество байт, выделенных под указатель, и возвращает его значение в виде целого числа, округленного до DWORD (4 байта) в большую сторону. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Память и Указатели ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |