Динамическое распределение памяти
Falk0ner, вс, 06/07/2008 - 15:34.
Она слишком большая для глобального распределения, так что вместо объявления глобальной переменной,
var
MyData: TMyStructure;
объявляете указательный тип,
type
PMyStructure = ^TMyStructure;
и переменную этого типа,
var
MyDataPtr: PMyStructure;
Такой указатель занимает всего лишь четыре байта сегмента данных.
Прежде, чем вы сможете использовать структуру данных, вы должны распределить ее в куче:
New(MyDataPtr);
и получить к ней доступ через глобальные данные любым удобным для вас способом. Единственное отличие от традиционного способа заключается в необходимости использования символа "^" для обозначения указателя на данные:
И, наконец, после использования памяти, освободите ее:
Dispose(MyDataPtr);
Примечание от Vit: статья актуальна в основном для 16 разрядных систем
http://delphiworld.narod.ru/
DelphiWorld 6.0
Динамическое распределение памяти
uses WinCRT;
procedure TForm1.Button1Click(Sender: TObject);
var
MyArray: array[0..30] of char;
b: ^char;
i: integer;
begin
StrCopy(MyArray, 'string');
b := @MyArray;
for i := StrLen(MyArray) downto 0 do
begin
write(b^);
inc(b, sizeof(char));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyArray: array[0..30] of char;
b: ^char;
i: integer;
begin
StrCopy(MyArray, 'string');
b := @MyArray;
for i := StrLen(MyArray) downto 0 do
begin
write(b^);
inc(b, sizeof(char));
end;
end;
http://delphiworld.narod.ru/ DelphiWorld 6.0
Как мне уменьшить количество занимаемой мной памяти в сегменте данных? (или как мне распределять память динамически?)
Скажем, ваша структура данных выглядит похожей на эту:
type
TMyStructure = record
Name: String[40];
Data: array[0..4095] of Integer;
end;
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 := 'string 2';
MyDataPtr^.Data[0] := 12345;
MyDataPtr^.Data[0] := 12345;
И, наконец, после использования памяти, освободите ее:
Dispose(MyDataPtr);
Примечание от Vit: статья актуальна в основном для 16 разрядных систем
http://delphiworld.narod.ru/
DelphiWorld 6.0
Отправить комментарий