Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемwww.novsu.ru
1 Информационные технологии
2 2 Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при выходе из неё. Они видны только внутри функции или блока, в которых определены. Этот класс памяти используется, если не указан ни один из четырёх модификаторов Статические переменные имеют такую же область действия, как автоматические, но они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого. Внешние переменные доступны везде, где описаны, а не только там, где определены. Включение ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. Это слово является всего лишь «пожеланием» компилятору помещать часто используемую переменную в регистры процессора для ускорения программы.
3 3 Классы памяти Класс памяти можно не указывать, тогда действуют следующие умолчания: переменные, описанные внутри функции или блока, считаются локальными (auto). переменные, описанные вне всех функций, считаются внешними. функции считаются внешними. Автоматические переменные Внешние переменные
4 4 Классы памяти Статические переменные
5 5 Классы памяти Классы памяти, которые описываются внутри функции: автоматический, продолжительность существования - временно, область действия - локальная; регистровый, продолжительность существования - временно, область действия - локальная; статический, продолжительность существования - постоянно, область действия - локальная. Классы памяти, которые определяются вне функции: внешний, продолжительность существования - постоянно, область действия глобальная (все файлы); внешний статический, продолжительность существования - постоянно, область действия - глобальная (один файл).
6 Хранение данных 6 Способы выделения памяти для объекта Статическое выделение Автоматическое выделение Динамическое выделение
7 Массивы и указатели 7
8 8
9 Динамические объекты 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 Динамические объекты 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 Динамические объекты 11 #include void free(void *ptr); Функция free() возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем рtr, после чего эта память становится доступной для выделения в будущем. Обязательно следите, чтобы free() вызывалась только с указателем, который был ранее получен в результате вызова одной из системных функций динамического распределения. #include void free(void *ptr); Функция free() возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем рtr, после чего эта память становится доступной для выделения в будущем. Обязательно следите, чтобы free() вызывалась только с указателем, который был ранее получен в результате вызова одной из системных функций динамического распределения.
12 Массивы и указатели 12 Массивы и указатели тесно связаны! Имя каждого массива может рассматриваться как указатель на первый элемент массива. Элемент массива a[i] есть элемент массива, на который указывает значение a+i, т.е. *(a+i), где значение а является адресом первого элемента массива а, а именно a[0]. Х - двумерный массив. Тогда ссылка на подмассив x[i] является ссылкой на i-ю строку массива x. Строки - это массивы знаков. Переменные типа string могут также рассматриваться, как имеющие тип char *. char *string_pointer, string_array[81];
13 Массивы и указатели 13
14 Массивы и указатели 14
15 Массивы и указатели 15
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.