ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Сравнение Автоматической и динамической переменных.Автоматические переменные. По умолчанию переменные, описанные внутри функции, являются автоматическими. Можно, однако, это подчеркнуть явно с помощью ключевого слова auto: main() {autointkat;} Так поступают, если хотят, например, показать, что определение переменной не нужно искать вне функции. Автоматические переменные имеют локальную область действия. Только функция, в которой переменная определена, знает ее. Другие функции могут использовать переменные с тем же самым именем, но это будут независимые переменные, находящиеся в разных ячейках памяти. Автоматическая переменная начинает существовать при вызове функции, содержащей ее. Когда функция завершает свою работу и возвращает управление туда, откуда ее вызвали, автоматическая переменная исчезает. Область действия автоматической переменной ограничена блоком, т.е. { }, в котором переменная описана. Все переменные, которые вы объявляли до сих пор, объявлялись внутри блока — то есть, внутри пары фигурных скобок. Такие переменные называются автоматическими, и о них говорят, что у них локальная область видимости, или область видимости блока. Автоматическая переменная "видима", начиная с точки, в которой она объявлена, и до конца блока, содержащего ее объявление. Пространство, которое занимает автоматическая переменная, выделяется автоматически в области памяти, называемой стеком, которая специально предназначена для этой цели. По умолчанию размер стека составляет 1 Мбайт, чего достаточно для большинства случаев, хотя если его не хватает, вы можете увеличить размер стека, установив опцию проекта /STACK в необходимое значение по своему выбору. Динамические переменные. программа не может превысить лимит памяти, запланированный при трансляции. В противном случае ей потребуется дополнительная память, выделяемая во время выполнения программы. С этой целью на уровне библиотек в Си создан механизм порождения и уничтожения переменных самой работающей программой. Такие переменные называются динамическими, а область памяти, в которой они создаются – динамической памятью основные свойства динамических переменных: динамические переменные создаются и уничтожаются работающей программой путем выполнения специальных операторов или вызовов функций; количество и размерность динамических переменных (массивов) может меняться в процессе работы программы. Это определяется числом вызовов соответствующих функций их параметрами; динамическая переменная не имеет имени, доступ к ней возможен только через указатель; функция создания динамической переменной ищет в «куче» свободную память необходимого размера и возвращает указатель на нее (адрес); функция уничтожения динамической переменной получает указатель на уничтожаемую переменную.
Наиболее важным свойством динамической переменной является ее «безымянность» и доступность по указателю. Таким образом, динамическая переменная не может быть доступна «сама по себе», а только опосредованно через другие переменные или обычные именованные указатели. Работа с динамическими переменными и системой ДРП имеет ряд особенностей и сложностей. Они усугубляются еще и тем, что в Си в соответствии с требованиями эффективности программного кода, функции библиотеки минимально защищены от ошибок программирования: если динамическая переменная создана, а указатель на нее «потерян» программой, то такая переменная -существует, но недоступна для использования. Тем не менее, занимаемая ею память остается за программой; ошибки в процессе создания, уничтожения и работы с динамическими переменными приводят к непредсказуемым последствиям в работе программ Не нашли, что искали? Воспользуйтесь поиском:
|