Советы по Delphi



         

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


Тема: Управление размером сегмента данных

Ошибка "Data Segment too large" (сегмент данных слишком велик) возникает в Delphi 16-битных приложениях в случае, когда размер статических данных, стека и локальной кучи превышает предел приложений Windows, установленный в 64К. В данном совете обсуждается тема идентификации и изменения части вашего кода, которая поглощает память в сегменте данных, и как, собственно, управлять этим ограниченным ресурсом.

Из чего состоит сегмент данных?

Task header: 16 байт различной системной информации Windows (заголовок задачи) Static data: Содержит глобальные переменные и типовые (статические константы данные) Stack: Хранит локальные переменые, распределенные (стек) процедурами и функциями. Размер стека по по умолчанию 16К и может быть изменен на странице Options|Project|Linker. Local heap: Используется Windows для временного хранения и (локальная по умолчанию имеет размер 8К. Не устанавливайте куча) разнер локальной кучи, равным 0. Windows при необходимости может увеличить данную область. Как мне узнать полный размер сегмента данных?

Для того, чтобы получить размер статических данных 16-битного приложения Delphi, стека и локальной кучи для проекта, скомпилируйте проект и выберите в меню Delphi пункт Compile|Information. Для нового проекта с одной формой диалог покажет следующую информацию:

Source compile: 12 lines (скомпилировано 12 строк исходного кода) Code size: 128981 bytes (размер кода 128981 байт) Data size: 3636 bytes (размер данных 3636 байт) Stack size: 16384 bytes (размер стека 16384 байт) Local Heap size: 8192 bytes (размер локальной кучи 8192 байт) Приложение Delphi начинается с объявления в модуле статических данных, тем самым обеспечивая функциональную инициализацию. Если единственная глобальная переменная является именем формы, то приложение занимает уже, по крайней мере, 3,636 байт. Добавляя вторую форму, размер увеличивается только до 3640 -- добавляется только размер глобальной переменной, необходимой для объявления второй формы.

var
Form2: TForm2; { 4-х байтный указатель }
<


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