SysReallocMem, функция

Синтаксис


function SysReallocMem(P:  Pointer;  NewSize:   Integer):  Pointer;

Описание

Функция SysReallocMem вызывает встроенный менеджер памяти Delphi для повторного выделения блока памяти с новым размером. Новый блок может быть расположен по тому же адресу, что и старый, либо может быть скопирован по новому адресу. В любом случае SysReallocMem возвращает указатель на начало блока.
Если новый размер больше старого, новая область памяти не инициализируется. Если запрос на выделение памяти не может быть выполнен, SysReallocMem сохраняет старый блок в неизменном состоянии и возвращает nil. SysReallocMem - настоящая функция.

Ошибки

Советы и приемы

Пример


// Пояснения по этому менеджеру памяти приведечы в описании процедуры
// SetMemoryManager.
// Функция GuardsAreOkay рассмотрена в описании функции SysFreeMem.
// Функция RoundUpSize рассмотрена в описании функции SetMemoryManager.

// Повторное выделение блока с новым размером.  Возвращает указатель
// на новый блок памяти или nil в случае неудачи.
function DebugRealloc(Mem: Pointer; Size: Integer): Pointer;
var
  PArray:  PIntegerArray;
begin
  // Получение указателя на истинное начало блока памяти.
  PArray := PIntegerArray(PChar(Mem) - GuardSize);

  if not GuardsAreOkay(PArray, False) then
     ReportError(2); // invalid pointer

  // Округление Size до числа,   кратного размеру защитного
  Size := RoundUpSize(Size);

  PArray := SysReallocMem(PArray, Size);
  if PArray = nil then
    Result:=nil
  else
  begin
    // Запись защитных слов.
    PArray[0]  := AllocatedGuard;
    PArray[Size div GuardSize + 1] := AllocatedGuard;
    // Возвращаем указатель на область памяти, начинающуюся сразу
    // после первого защитного слова.
    Result := @PArray[1];
  end;
end;

Смотрите также

Процедуры GetMemoryManager, ReallocMem, SetMemoryManager, функции IsMemoryManagerSet, ReallocMemory, SysFreeMem, SysGetMem.
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник




Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: