Информационные технологии 2012 1. 2 Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.

Презентация:



Advertisements
Похожие презентации
ЛЕКЦИЯ 7 КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ ОБЪЕКТОВ.
Advertisements

Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Время жизни и области видимости программных объектов Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ.
Элементы ЯПВУ. УКАЗАТЕЛИ. C / С++ Pascal Вся динамическая память в Pascal это сплошной массив байтов (куча). Адрес начала кучи храниться в переменной HeapOrg,
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 2 Время жизни и области видимости программных объектов (весенний семестр 2012 г.) Доцент Кафедры вычислительных.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Распределение памяти. Динамическое выделение памяти.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
ПРОБЛЕМЫ ПРИ ЯВНОМ РАСПРЕДЕЛЕНИИ ПАМЯТИ В С++, СПОСОБЫ ИХ РЕШЕНИЯ. ССЫЛКИ И УКАЗАТЕЛИ. РАСПРЕДЕЛЕНИЕ ПАМЯТИ ПОД ПЕРЕМЕННЫЕ, УПРАВЛЕНИЕ ПАМЯТЬЮ С ПОМОЩЬЮ.
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Под объявлением одномерного динамического массива понимают объявление указателя на переменную заданного типа для того, чтобы данную переменную можно.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Транксрипт:

Информационные технологии

2 Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при выходе из неё. Они видны только внутри функции или блока, в которых определены. Этот класс памяти используется, если не указан ни один из четырёх модификаторов Статические переменные имеют такую же область действия, как автоматические, но они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого. Внешние переменные доступны везде, где описаны, а не только там, где определены. Включение ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. Это слово является всего лишь «пожеланием» компилятору помещать часто используемую переменную в регистры процессора для ускорения программы.

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

4 Классы памяти Статические переменные

5 Классы памяти Классы памяти, которые описываются внутри функции: автоматический, продолжительность существования - временно, область действия - локальная; регистровый, продолжительность существования - временно, область действия - локальная; статический, продолжительность существования - постоянно, область действия - локальная. Классы памяти, которые определяются вне функции: внешний, продолжительность существования - постоянно, область действия глобальная (все файлы); внешний статический, продолжительность существования - постоянно, область действия - глобальная (один файл).

Хранение данных 6 Способы выделения памяти для объекта Статическое выделение Автоматическое выделение Динамическое выделение

Массивы и указатели 7

8

Динамические объекты 9 Динамические объекты, в отличие от заранее определяемых, создаются динамически и явно в процессе выполнения программы. Для создания динамических объектов служат функции malloc и calloc #include void *malloc(size_t size); Функция malloc() возвращает указатель на первый байт области памяти размером size, которая была выделена из динамически распределяемой области памяти. Если для удовлетворения запроса в динамически распределяемой области памяти нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать выделенную память всегда проверяйте, что возвращаемое значение не является нулевым указателем. #include void *malloc(size_t size); Функция malloc() возвращает указатель на первый байт области памяти размером size, которая была выделена из динамически распределяемой области памяти. Если для удовлетворения запроса в динамически распределяемой области памяти нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать выделенную память всегда проверяйте, что возвращаемое значение не является нулевым указателем. #include void *calloc(size_t num, size_t size); Функция calloc() выделяет память, размер которой равен значению выражения num * size, т.е. память, достаточную для размещения массива, содержащего num объектов размером size. Все биты распределенной памяти инициализируются нулями. Функция calloc() возвращает указатель на первый байт выделенной области памяти. Если для удовлетворения запроса нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать распределенную память важно проверить, что возвращаемое значение не равно нулю. #include void *calloc(size_t num, size_t size); Функция calloc() выделяет память, размер которой равен значению выражения num * size, т.е. память, достаточную для размещения массива, содержащего num объектов размером size. Все биты распределенной памяти инициализируются нулями. Функция calloc() возвращает указатель на первый байт выделенной области памяти. Если для удовлетворения запроса нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать распределенную память важно проверить, что возвращаемое значение не равно нулю.

Динамические объекты 10 unsigned size; /* объем памяти, который необходимо выделить */ char *s = (char*)malloc(size); unsigned size; /* объем памяти, который необходимо выделить */ char *s = (char*)malloc(size); unsigned nelem; /* число элементов, для которых нужно выделить память */ unsigned elsize; /* объем памяти для каждого элемента */ char *s = (char *)calloc(nelem,elsize); unsigned nelem; /* число элементов, для которых нужно выделить память */ unsigned elsize; /* объем памяти для каждого элемента */ char *s = (char *)calloc(nelem,elsize); Обе функции возвращают знаковый указатель, указывающий на выделенную память. Для определения необходимого объема памяти можно использовать оператор sizeof: sizeof (выражение)

Динамические объекты 11 #include void free(void *ptr); Функция free() возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем рtr, после чего эта память становится доступной для выделения в будущем. Обязательно следите, чтобы free() вызывалась только с указателем, который был ранее получен в результате вызова одной из системных функций динамического распределения. #include void free(void *ptr); Функция free() возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем рtr, после чего эта память становится доступной для выделения в будущем. Обязательно следите, чтобы free() вызывалась только с указателем, который был ранее получен в результате вызова одной из системных функций динамического распределения.

Массивы и указатели 12 Массивы и указатели тесно связаны! Имя каждого массива может рассматриваться как указатель на первый элемент массива. Элемент массива a[i] есть элемент массива, на который указывает значение a+i, т.е. *(a+i), где значение а является адресом первого элемента массива а, а именно a[0]. Х - двумерный массив. Тогда ссылка на подмассив x[i] является ссылкой на i-ю строку массива x. Строки - это массивы знаков. Переменные типа string могут также рассматриваться, как имеющие тип char *. char *string_pointer, string_array[81];

Массивы и указатели 13

Массивы и указатели 14

Массивы и указатели 15