Видимость и время жизни переменных, объектов и массивов
Класс хранения переменной, объекта или массива определяет, когда и где
память выделяется для них и когда разрушается. Есть 2 классы хранения в
FreeBASIC: автоматические и статические.
Автоматический
Время жизни автоматической переменной, объекта и массива начинается в точке
декларации и заканчивается при выходе из нее.
Автоматические переменные, объекты и массивы гарантированно имеют уникальное
хранение для каждого экземпляра блока, в котором они объявлены. Например
автоматические переменные, объявленные в процедуре будут распределяться по
разным адресам и иметь уникальное состояние (значение) для каждого вызова
процедуры.
Автоматические переменные, объекты и массивы определяются с помощью ключевых
слов
Dim,
ReDim
и
Var без описателя
Shared.
Память для автоматических переменных, объектов и массивов выделяется в стеке
программы.
Автоматические переменные, объекты и массивы не имеют внутренних связей.
Статический
Статическая переменная, объект и массив начинают свою жизнь с создания
программы и заканчивают при ее завершении.
Статические переменные, объекты и массивы гарантированно имеют то же
хранилище для каждого экземпляра блока , в котором они объявлены. Например
статические переменные, объявленные в процедуре будут выделяться по тому же
адресу и сохранять их состояние (значение) для каждого вызова процедуры.
Статические переменные, объекты и массивы объявляются с помощью ключевого
слова
Static. Переменные, объекты и
массивы, объявленные с помощью спецификатора
Shared
статичны неявным образом. Точно так же они статичны неявным образом, если
они объявлены внутри процедуры с помощью описателя
Static
Память для статических переменных, объектов и массивов выделяется в секции
.BSS исполняемого файла или в секции .DATA, если они инициализируются при
определении. Статические массивы переменной длины должны быть объявлены
пустыми, с пустым списком индексов диапазона; их данные для элементов
выделяются в свободной памяти (когда они изменяются), но данные внутреннего
использования массивов выделяются в разделе DATA исполняемого файла чтобы
позволить данным элемента, сохранится на протяжении выполнения программы.
Статические переменные, объекты и массивы имеют внутренние связи по
умолчанию, если ранее объявлены с помощью ключевого слова
Extern
или
Common.
Различия платформ
- В DOS и Windows платформах, размер стека программы может быть
скорректирован во время компиляции с помощью -t
параметра командной строки. На платформе
Linux, размер стека программы может быть скорректирован во время загрузки
путем изменения /etc/security/limits.conf, или для каждого потока с
помощью встроенной команды оболочки ulimit.
Отличия от QB
- QuickBASIC позволяет статическим элементам быть объявленным только в
процедурах и заданным порядком DEF FN.
См. также