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

Слайд 2

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

Память, которую использует программа делится на три вида:
Статическая память (static

Динамическое распределение памяти Память, которую использует программа делится на три вида: Статическая
memory)
хранит глобальные переменные и константы;
размер определяется при компиляции.
Стек (stack)
хранит локальные переменные, аргументы функций и промежуточные значения вычислений;
размер определяется при запуске программы (обычно выделяется 4 Мб).
Куча (heap)
динамически распределяемая память;
ОС выделяет память по частям (по мере необходимости).
Динамически распределяемую память используют тогда, если заранее неизвестно, сколько памяти потребуется (например, размер массива, который вводится пользователем), или при работе с большими объемами данных.

Слайд 3

Функции динамического распределения памяти в Си

void *malloc(size_t size);
Функция выделяет size байтов памяти

Функции динамического распределения памяти в Си void *malloc(size_t size); Функция выделяет size
и возвращает указатель на неё. Если память выделить не удалось, то функция возвращает NULL. Так как malloc возвращает указатель типа void, то его необходимо явно приводить к нужному нам типу.
int *p = NULL;
p = (int*) malloc(100); //выделено 100 байт
p = (int *) malloc(5*sizeof(int)); //выделена память под 5 intов
free(p);
После окончания работы с выделенной динамически памятью нужно освободить ее. Для этой цели используется функция free, которая возвращает память под управление ОС.

Слайд 4

Функции динамического распределения памяти в Си

void *calloc(size_t num, size_t size);
Функция выделяет num

Функции динамического распределения памяти в Си void *calloc(size_t num, size_t size); Функция
объектов размером size и заполняет их нулями. Обычно она используется для выделения памяти под массивы. Если память не может быть выделена, возвращается NULL.
int *p = (int *) calloc(10, sizeof(int));
p будет указывать на начало массива из 10 intов, инициализированных нулями.

Слайд 5

Функции динамического распределения памяти в Си

void* realloc(void* ptr, size_t size);
Функция позволяет изменить

Функции динамического распределения памяти в Си void* realloc(void* ptr, size_t size); Функция
размер ранее выделенной памяти и получает в качестве аргументов старый указатель и новый размер памяти в байтах. Содержание блока памяти сохраняется даже если новый блок имеет меньший размер, чем старый. Отбрасываются только те данные, которые не вместились в новый блок.
Если размер указанный в параметре size больше, чем тот, который был выделен под указатель ptr, то проверяется, есть ли возможность выделить недостающие ячейки памяти подряд с уже выделенными. Если новое значение size больше старого, то содержимое вновь выделенной памяти будет неопределенным. Если места недостаточно, то выделяется новый участок памяти размером size и данные по указателю ptr копируются в начало нового участка.
Имя файла: Динамическое-распределение-памяти.pptx
Количество просмотров: 37
Количество скачиваний: 0