Советы по Delphi



         

Управление размером сегмента данных - часть 2


/p>

Общий размер сегмента данных (сумма статических данных, стека и локальной кучи) составляет 28,212 байт:

Data size: 3,636 Stack size: 16,384 Local Heap size: 8,192 ----------------------- 28,212 Какие части моего проекта увеличивают размер данных?

  • Переменные, объявленные в секции interface и implementation.
  • Типизированные константы, объявленные в любом месте приложения.
Пример объявления типизированной константы:

constMyConst: integer = 100;

Модули, объявленные в списке Uses, и компоненты могут содержать код с объявлениями глобальных переменных или типизированных констант. Например, TBitBtn добавляет к проекту 180 байт, и, по крайней мере, 132 байт резервируются для типизированных констант и глобальных переменных, объявленных в модуле Buttons.Pas. При добавлении дополнительных 10 компонентов TBitBtn, размер проекта после первых 180 байт не увеличится.

Следующий демонстрационный модуль включает в себя комментарии, описывающие использование памяти:

unit Test;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
{ Используемые в модуле функции могут иметь глобальные переменные и типизированные константы, которые увеличивают размер сегмента данных. }

type{ Объекты класса хранятся в глобальной куче, не в сегменте данных}TForm1 = class(TForm)Label1: TLabel;Button1: TButton;procedure Button1Click(Sender: TObject);public{ MyInteger и MyString хранятся в глобальной куче. }MyInteger: Integer;MyString: String;end;
const{ MyConst - типизированная константа и сохраняется в области статических данных сегмента.
Минимизируйте количество типизированных констант. }MyConst: integer = 23;
var
{ Form1 - глобальная переменная и хранится в области статических данных сегмента. Вы должны минимизировать число и размер глобальных переменных. Form1 является указателем и занимает только четыре байта. }
Form1: TForm1;{ MyGlobalString занимает 256 байт, даже если строка состояла бы всего из нескольких символов. }
MyGlobalString: string;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);var{ MyLocal - локальная переменная и не хранится в сегменте данных. }MyLocal: String;beginMyLocal := 'Тестовое приложение';Label1.Caption := MyLocalend;
end.
<


Содержание  Назад  Вперед