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 Лабораторные работы по программированию Справочник
|