Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Динамическое распределение памяти

01.01.2007
uses WinCRT;
 
procedure TForm1
.Button1Click(Sender: TObject);
var
 
MyArray: array[0..30] of char;
  b
: ^char;
  i
: integer;
begin
 
StrCopy(MyArray, 'Delphi World - это круто!!!');
  b
:= @MyArray;
 
for i := StrLen(MyArray) downto 0 do
 
begin
    write
(b^);
    inc
(b, sizeof(char));
 
end;
end;

https://delphiworld.narod.ru/

DelphiWorld 6.0


Как мне уменьшить количество занимаемой мной памяти в сегменте данных? (или как мне распределять память динамически?)

Скажем, ваша структура данных выглядит похожей на эту:

type
 
TMyStructure = record
   
Name: String[40];
   
Data: array[0..4095] of Integer;
end;

Она слишком большая для глобального распределения, так что вместо объявления глобальной переменной,

var

MyData: TMyStructure;

объявляете указательный тип,

type

PMyStructure = ^TMyStructure;

и переменную этого типа,

var

MyDataPtr: PMyStructure;

Такой указатель занимает всего лишь четыре байта сегмента данных.

Прежде, чем вы сможете использовать структуру данных, вы должны распределить ее в куче:

New(MyDataPtr);

и получить к ней доступ через глобальные данные любым удобным для вас способом. Единственное отличие от традиционного способа заключается в необходимости использования символа "^" для обозначения указателя на данные:

MyDataPtr^.Name := 'Советы по Delphi';
MyDataPtr^.Data[0] := 12345;

И, наконец, после использования памяти, освободите ее:

Dispose(MyDataPtr);

Примечание от Vit: статья актуальна в основном для 16 разрядных систем

https://delphiworld.narod.ru/

DelphiWorld 6.0