Советы по Delphi

         

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


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

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

    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);

[000936]



Содержание раздела