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

Previous  Top  Next

    
 

 

Code:

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;

 

©Drkb::00812

http://delphiworld.narod.ru/

DelphiWorld 6.0

 


 

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

 

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

 

Code:

type

TMyStructure = record

   Name: String[40];

   Data: array[0..4095] of Integer;

end;

 

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

 

var

MyData: TMyStructure;

 

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

 

type

PMyStructure = ^TMyStructure;

 

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

var

MyDataPtr: PMyStructure;

 

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

 

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

 

New(MyDataPtr);

 

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

 

Code:

MyDataPtr^.Name := 'Советы по Delphi';

MyDataPtr^.Data[0] := 12345;

 

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

 

Dispose(MyDataPtr);

 

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

©Drkb::00813

http://delphiworld.narod.ru/

DelphiWorld 6.0