Здавалка
Главная | Обратная связь

Статические и динамические переменные



Практика программирования часто выдвигает на передний план два конфликтующих фактора: время выполнения программы и объем занимаемой памяти. Конечно, высокое быстродействие программы всегда желательно, но бывают случаи, когда важнее обеспечить максимальную экономию памяти даже ценой потери в скоростных характеристиках.

Рассмотрим пример. Пусть в программе обрабатывается матрица 300*300 целых чисел, тогда ее нужно описать следующим образом:

var M1 : array[1..300,1..300] of Integer;

Такие переменные, описанные в разделе Var, Н.Вирт назвал статическими. Название "статические" они получили за то, что компилятор Паскаля может обработать их без выполнения программы, т. е. на основании лишь статического текста программы. Статические переменные можно использовать в случаях, когда память, необходимая для работы программы, предсказуема в момент написания программы.

В данном случае мы имеем наглядный пример нерационального использования памяти компьютера с применением статических переменных. Так как один элемент матрицы — целое число — занимает в памяти два байта, а общее количество элементов равно 300*300= 90000, то для размещения всей матрицы вышеописанным способом в памяти компьютера нужно 90000*2 байт = 180000 байт. Вместе с тем маловероятно, чтобы при всяком выполнении программы ей действительно были нужны одновременно все элементы такого огромного массива. К тому же все переменные, объявленные в программе, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Длина сегмента данных определяется архитектурой микропроцессора 8086 и составляет 65536 байт (64 Кбайта), что также вызывает затруднения при обработке больших массивов данных.

Выходом из этого положения может быть использование динамической памяти. Динамическая память - это оперативная память компьютера, предоставляемая программе при ее работе, за вычетом сегмента данных (64 Кбайта), стека (обычно 16 Кбайт) и собственно тела программы. Размер динамической памяти определяется всей доступной памятью компьютера и составляет 200...400 Кбайт.

Решение проблемы экономного расходования памяти состоит в том, чтобы не резервировать заранее максимальный объем памяти для размещения данных, а, предварительно определив тип данных, создавать новый экземпляр данных всякий раз, когда в нем возникает необходимость. Такие переменные, которые создаются и уничтожаются в процессе выполнения программы, называются динамическими. Динамическая память широко используется для временного запоминания данных при работе с графическими и звуковыми средствами компьютера.

Указатели

Все рассмотренные ранее типы данных содержат непосредственно данные, размещенные в памяти компьютера. Для организации динамической памяти применяются особые переменные, называемые указателями. Назначение их состоит в том, чтобы указывать местоположение какой-то другой переменной заранее определенного типа.

Таким образом, указатель - это переменная, которая в качестве своего значения содержит адрес первого байта памяти, по которому записаны данные. Сам по себе указатель занимает в памяти всего четыре байта, а данные, на которые он указывает, могут простираться в памяти на десятки килобайт. Переменной, на которую указывает указатель, не обязательно присваивать какое-либо имя. К ней можно обращаться через имя указателя, потому она называется ссылочной переменной.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.