Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
ReallocMem
Процедура
Позволяет изменить размер существующего блока памяти System unit
  procedure ReallocMem ( var StoragePointer : Pointer; StorageSize : Integer ) ;
Описание
Delphi процедура ReallocMem изменяет размер памяти существующего блока хранения.

Размер может быть меньшим или больше.

Если меньше, тогда существующий размер памяти будет уменьшен на разность существующего размера к необходимому.

Если больше, тогда размер памяти будет расширен. Или будет создан новый блок памяти, если это необходимо. В любом случае, блочные данные существующей памяти сохранены, и новая часть памяти инициализирована.
Примечания
Предупреждение: используйте с предосторожностью - чрезмерное использование может фрагментировать память.
Похожие команды
Dispose  Очищает память на которую указывает указатель

FreeMem  Освобождает память, используемую переменной

GetMem  Получает указанное число байтов памяти.

New  Создаёт новую переменную типа указатель

 
Пример кода : Распределение используя GetMem, и затем перераспределение используя ReallocMem
type
  TRecord = Record
    name : string[10];
    age  : Byte;
  end;

var
  recPointer : ^TRecord;

begin
  // Распределите память для 2 записей
  // Обратите внимание: для этого лучше использовать New
  // Здесь используется только в целях иллюстрации
  GetMem(recPointer, 2 * SizeOf(TRecord));

  // Заполнение значениями этих 2-х записей
  recPointer.name := 'Brian';
  recPointer.age  := 23;

  Inc(recPointer);
  recPointer.name := 'Jim';
  recPointer.age  := 55;

  // Ууупс - забыли добавить Sally...
  Dec(recPointer);
  ReallocMem(recPointer, 3 * SizeOf(TRecord));

  // Теперь добавляем 3-ю запись
  Inc(recPointer,2);
  recPointer.name := 'Sally';
  recPointer.age  := 38;

  // Теперь показываем эти значения
  Dec(recPointer, 2);
  ShowMessageFmt('%s - %d',[recPointer.name, recPointer.age]);
  Inc(recPointer);
  ShowMessageFmt('%s - %d',[recPointer.name, recPointer.age]);
  Inc(recPointer);
  ShowMessageFmt('%s - %d',[recPointer.name, recPointer.age]);
end;
Brian - 23
Jim - 55
Sally - 38
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия