Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс ПЯВУ 2 сем / Лекции 2 сем / Л№24.Классы памяти / Лекция №26 .Классы памяти.odt
Скачиваний:
15
Добавлен:
17.04.2015
Размер:
43.41 Кб
Скачать

Лекция.Классы памяти.

План лекции.

    1. Карта памяти программы на языке С.

    2. Понятие области видимости.

    3. Типы областей видимости.

    4. Объявление переменных.

    5. Локальная область видимости.

    6. Спецификаторы области видимости.

      6.1. Спецификатор extern.

      6.2. Спецификаторstatic.

      6.3. Спецификаторregister.

      6.4. Спецификаторauto.

    7. Время жизни объекта.

    8. Классы памяти и функции.

      8.1. Локальные переменные в функциях.

      8.2. Как функции используют стек.

      8.3. Накладные расхода при выполнении функций.

      8.4. Размещение локальных переменных в С.

      8.5. Объявление локальных переменных.

      8.6. Почему следует избегать использование глобальных переменных.

      8.7. Правильное задание области действия глобальных переменных.

    9. Пространство имен.

    10. Пространство имен стандартных функций.

1. Карта памяти программы на языке с

Скомпилированная программа С имеет четыре логически обособленные области памяти. Первая — это область памяти, содержащая выполнимый код программы. Во второй области хранятся глобальные переменные. Оставшиеся две области — это стек и динамически распределяемая область памяти[1]. Стек используется для хранения вспомогательных переменных во время выполнения программы. Здесь находятся адреса возврата функций, аргументы функций, локальные переменные и т.п. Текущее состояние процессора также хранится в стеке. Динамически распределяемая область памяти, или куча — это такая свободная область памяти, для получения участков памяти из которой программа вызывает функции динамического распределения памяти. На рис. 1. показано, как распределяется память во время выполнения программы. Но не следует забывать, что конкретное распределение может быть разным в зависимости от типа процессора и реализации языка.

------------------------------------------------------------------------------------------------------------------------

Стек

------------------------------------------------------------------------------------------------------------------------

Динамически распределяемая область памяти

------------------------------------------------------------------------------------------------------------------------

* Глобальные переменные

------------------------------------------------------------------------------------------------------------------------

Код программы

------------------------------------------------------------------------------------------------------------------------

Рис.1.Распределение памяти(карта памяти)при выполнении программ,написанной на языке C

    Называется также динамической областью, динамически распределяемой областью,

    кучей и неупорядоченным массивом.

    2. Понятие области видимости.

    Обсуждаются два важных вопроса, касающиеся объявлений в С++. Где употребляется объявленное имя? Когда можно безопасно использовать объект или вызывать функцию, т.е. каково время жизни сущности в программе? Для ответа на первый вопрос мы введем понятие областей видимости и покажем, как они ограничивают применение имен в исходном файле программы. Мы рассмотрим разные типы таких областей: глобальную и локальную, а также более сложное понятие областей видимости пространств имен, которое появится в конце главы. Отвечая на второй вопрос, мы опишем, как объявления вводят глобальные объекты и функции (сущности, “живущие” в течение всего времени работы программы), локальные (“живущие” на определенном отрезке выполнения) и динамически размещаемые объекты (временем жизни которых управляет программист). Мы также исследуем свойства времени выполнения, характерные для этих объектов и функций.

    Каждое имя в С++ программе должно относиться к уникальной сущности (объекту, функции, типу или шаблону). Это не значит, что оно встречается только один раз во всей программе: его можно повторно использовать для обозначения другой сущности, если только есть некоторый контекст, помогающий различить разные значения одного и того же имени. Контекстом, служащим для такого различения, служит область видимости. В С++ поддерживается три их типа: локальная область видимости, область видимости пространства имен и область видимости класса.

    Локальная область – это часть исходного текста программы, содержащаяся в определении функции (или в блоке). Любая функция имеет собственную такую часть, и каждая составная инструкция (или блок) внутри функции также представляет собой отдельную локальную область.

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

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

Соседние файлы в папке Л№24.Классы памяти