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

Содержание
- 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
Наш инстаграм. Задание 6 недели
Процессинг
Числовые данные. 2 класс
Как измерить информацию?
Лекция №5. Программы-архиваторы
Текстовая информация
База данных – основа информационной системы
Архитектура программного обеспечения
Правила использования мессенджеров (Skype, zoom)
Детский Интернет-форум Цифровое поколение
Содержательный процесс разработки ассемблерной программы. (Лекция 8)
Web-программирование. Лекция 5. Шаблоны проектирования
Компьютерная графика
Методология тестирования web-приложения
Установка ИМ на хостинг на примере OpenCart
Сквозные технологии НТИ
Презентация на тему Введение в программирование Turbo Pascal 9 класс
Краудфандинг. Интернет площадка
Подготовка, обработка и описание данных
Регистрация на дату экзамена в ГИБДД. Получение электронного билета
Базы данных. Основные понятия баз данных и СУБД
Презентация на тему Текстовые документы и технологии их создания (7 класс)
Программно-конфигурируемые сети
Manhunt for killer
Базы данных. Реляционная модель данных
В мире кодов. Способы кодирования информации. Метод координат
Информатика. Повторение и обобщение изученного материала
Java in our hands