Описание |
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
|
|