Процедура ReallocMem в Delphi – дозволяє змінити розмір існуючого блоку пам'яті.
System unit
procedure ReallocMem (var StoragePointer : Pointer; StorageSize : Integer);
Процедура ReallocMem змінює розмір пам'яті наявного блоку зберігання.
Розмір може бути меншим або більшим.
Якщо менше, то існуюче сховище фактично скорочується, а решта звільняється.
Якщо більше, пам'ять подовжується. Або при необхідності виділяється новий блок. У будь-якому випадку існуючі дані блоку зберігання зберігаються, а нова частина не ініціалізується.
Попередження.
Використовуйте цю процедуру з обережністю – надмірне використання може фрагментувати пам'ять.
Процедура ReplaceDate: Розподіл використовуючи 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
Подібні функції, процедури та команди
Dispose — очищує пам'ять яку вказує покажчик.
FreeMem — звільняє пам'ять, що використовується змінною.
GetMem — отримує вказану кількість байтів пам'яті.
New — створює нову змінну типу покажчик.
