Когда транслятор анализирует разделы var в программе (основная ветка, функции, процедуры), он отводит для каждой переменной соответствующее число ячеек памяти и закрепляет их за данной переменной на все время работы блока. Такие переменные называют статическими. Они не могут быть использованы системой под другие нужды, даже если в процессе дальнейшей работы программы эти переменные больше не понадобятся.
Данные можно представить в памяти компьютера по-другому. Данные можно хранить в некоторой области памяти, не обозначая именем переменной, а используя ссылку на эту область. Такой вид организации данных позволяет динамически захватывать и освобождать память в процессе работы блока программы. Поэтому и сами переменные, которые могут создаваться и ликвидироваться по мере надобности, называют динамическими.
Динамические переменные чаще реализуются как связанные структуры.
Пример связанной структуры. В очереди на приеме к врачу каждый пациент запоминает человека, за которым занял очередь. Все пациенты связаны в цепочку согласно очереди, но в пространстве они размещены произвольным образом: вновь подошедший садится на любое свободное место, т.е. соседние элементы очереди могут находиться на произвольном расстоянии в пространстве.
Подобным образом строится структура связанных данных, которые могут занимать память не подряд, а размещаться там, где есть свободное место. Каждый элемент такой структуры должен «знать», за кем он «стоит», т.е. содержать ссылку на предыдущий элемент цепочки.
Чтобы проиллюстрировать преимущества динамических переменных, продолжим аналогию с очередью пациентов.
Пусть один из пациентов покидает очередь. Этот процесс не требует перемещения в пространстве остальных пациентов: просто стоящий за ушедшим теперь запоминает другого человека. То есть исключение элемента из цепочки данных сводится к изменению одной единственной ссылки и не требует перемещения остальных элементов, как это имело бы место для массива.

Исключенный элемент теперь можно освободить от участия в работе блока и использовать занимаемый им участок памяти для других целей.
С помощью ссылок легко вставить новую компоненту в цепочку данных. Для этого достаточно изменить две ссылки.
Новая динамическая компонента может быть размещена в любом свободном месте памяти, отведенном под такие переменные. Сама динамическая переменная не обозначается идентификатором. Динамическая переменная – это «невидимка» в программе: идентификатором она не обозначается, транслятор ей места в памяти не отводит. Память под такую переменную резервируется и освобождается динамически в процессе счета (с помощью специальных процедур).
Последние комментарии
3 дня 12 часов назад
4 дня 12 часов назад
1 неделя 5 дней назад
1 неделя 6 дней назад
2 недели 2 дня назад
2 недели 4 дня назад
2 недели 5 дней назад
2 недели 5 дней назад
3 недели 1 день назад
3 недели 1 день назад