- Главная
- Информатика
- Динамическое распределение памяти

Содержание
- 2. Динамическое распределение памяти Память, которую использует программа делится на три вида: Статическая память (static memory) хранит
- 3. Функции динамического распределения памяти в Си void *malloc(size_t size); Функция выделяет size байтов памяти и возвращает
- 4. Функции динамического распределения памяти в Си void *calloc(size_t num, size_t size); Функция выделяет num объектов размером
- 5. Функции динамического распределения памяти в Си void* realloc(void* ptr, size_t size); Функция позволяет изменить размер ранее
- 7. Скачать презентацию
Слайд 2Динамическое распределение памяти
Память, которую использует программа делится на три вида:
Статическая память (static
Динамическое распределение памяти
Память, которую использует программа делится на три вида:
Статическая память (static

memory)
хранит глобальные переменные и константы;
размер определяется при компиляции.
Стек (stack)
хранит локальные переменные, аргументы функций и промежуточные значения вычислений;
размер определяется при запуске программы (обычно выделяется 4 Мб).
Куча (heap)
динамически распределяемая память;
ОС выделяет память по частям (по мере необходимости).
Динамически распределяемую память используют тогда, если заранее неизвестно, сколько памяти потребуется (например, размер массива, который вводится пользователем), или при работе с большими объемами данных.
хранит глобальные переменные и константы;
размер определяется при компиляции.
Стек (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, которая возвращает память под управление ОС.
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);
Функция выделяет num

объектов размером size и заполняет их нулями. Обычно она используется для выделения памяти под массивы. Если память не может быть выделена, возвращается NULL.
int *p = (int *) calloc(10, sizeof(int));
p будет указывать на начало массива из 10 intов, инициализированных нулями.
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 копируются в начало нового участка.
Если размер указанный в параметре size больше, чем тот, который был выделен под указатель ptr, то проверяется, есть ли возможность выделить недостающие ячейки памяти подряд с уже выделенными. Если новое значение size больше старого, то содержимое вновь выделенной памяти будет неопределенным. Если места недостаточно, то выделяется новый участок памяти размером size и данные по указателю ptr копируются в начало нового участка.
- Предыдущая
Gene Delivery
Подборка компонентов и монтаж персонального компьютера
Обязательная контрольная работа по дисциплине информационная технология. Вариант №8
transportnye_seti
Дискретное (цифровое) представление информации
Арифметика DevC++
Среда программирования programming environment
Сервер и его виды
Информационные системы для электронного бизнеса
Массивы и структуры
Программирование на языке Python
Процесс разработки на языках высокого уровня
Программы обучения
Информатика (1 семестр)
Организация сетевого сотрудничества как форма медиаобразования
Risuemdoma.com
Антикризисный раздел на сайте Nutriclub.ru
Табличные модели
Любимый скайп. Топ-репетитор
Интерфейс Sound Forge 9.0 (часть 1)
Coreapp.ai. Запускаем онлайн-курс
Разработка программного обеспечения для управления движением мобильной платформы KUKA youBot
Использование ИКТ технологий на уроках МКХ и искусства с целью активизации познавательной деятельности учащихся
Операторы Pascal
Искусственный интеллект в образовании
Система дистанционного обучения Claroline
Библиографический калейдоскоп онлайн обзор
SMM специалист с нуля
Организация сетевого доступа. Тема 3