Классы хранения
 
Видимость и время жизни переменных, объектов и массивов

Класс хранения переменной, объекта или массива определяет, когда и где память выделяется для них и когда разрушается. Есть 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.

См. также