2.07M
Category: programmingprogramming

Динамическая память

1.

2.

ДИНАМИЧЕСКАЯ ПАМЯТЬ
• Динамическая память - это важный компонент
компьютерных систем, позволяющий программам
выделять и освобождать память по мере
необходимости. Благодаря динамической памяти
программы могут эффективно работать с
переменными и структурами данных любого
размера. В этой презентации мы рассмотрим
основные принципы работы динамической памяти,
познакомимся со стеком и кучей , а также
практические примеры использования.

3.

СТЕК И КУЧА
СТЕК
• Область оперативной памяти, которая
создаётся для каждого потока. Он работает в
порядке LIFO (Last In, First Out), то есть
последний добавленный в стек кусок памяти
будет первым в очереди на вывод из стека.
Каждый раз, когда функция объявляет
новую переменную, она добавляется в стек,
а когда эта переменная пропадает из
области видимости (например, когда
функция заканчивается), она автоматически
удаляется из стека. Когда стековая
переменная освобождается, эта область
памяти становится доступной для других
стековых переменных.
КУЧА
• Хранилище памяти, также расположенное
в ОЗУ, которое допускает динамическое
выделение памяти и не работает по
принципу стека: это просто склад для
ваших переменных. Когда вы выделяете в
куче участок памяти для хранения
переменной, к ней можно обратиться не
только в потоке, но и во всем
приложении. Именно так определяются
глобальные переменные. По завершении
приложения все выделенные участки
памяти освобождаются. Размер кучи
задаётся при запуске приложения, но, в
отличие от стека, он ограничен лишь
физически, и это позволяет создавать
динамические переменные.

4.

ОБЩЕНИЕ С КУЧЕЙ
• Вы взаимодействуете с кучей посредством ссылок, обычно называемых
указателями — это переменные, чьи значения являются адресами
других переменных. Создавая указатель, вы указываете на
местоположение памяти в куче, что задаёт начальное значение
переменной и говорит программе, где получить доступ к этому
значению. Из-за динамической природы кучи ЦП не принимает
участия в контроле над ней; в языках без сборщика мусора (C, C++)
разработчику нужно вручную освобождать участки памяти, которые
больше не нужны. Если этого не делать, могут возникнуть утечки и
фрагментация памяти, что существенно замедлит работу кучи. За
выделение и освобождение динамической памяти отвечают
стандартные функции библиотеки stdlib.h.

5.

ФУНКЦИЯ MALLOC()
• Функция malloc() выделяет
необходимое количество памяти
из Кучи и возвращает указатель
на первый байт области памяти,
которая выделена.
• (void*) – операция приведения
типа при необходимости меняем
на необходимый тип.
• Размер_памяти_в_байтах
находим с помощью функции
sizeof()

6.

7.

ФУНКЦИЯ FREE()
• Функция освобождает память, на
которую указывает указатель,
который мы передаём этой
функции.
Память, которую мы выделяем из Кучи,
необходимо обязательно освобождать, так
как эта память не очищается после окончания
программы. Эта область памяти очищается
только после перезагрузки компьютера, и
если её вовремя не очистить, то это приведёт
к утечке памяти, замедлению работы
компьютера и другим неприятным
последствиям, причины которых трудно
обнаружить.

8.

• Создать динамический одномерный массив из 10 элемент заполнить его
случайными числами и вывести его на экран в строку

9.

• В файле input.txt записаны 3 числа: размер массива и границы диапазона
значений элементов массива. Прочитать этот файл, создать массив и заполнить
его случайными числами из диапазона. Вывести массив на экран.

10.

• Дан одномерный массив заполненный случайными значениями из
диапазона [-34; 87]. Образуйте новый одномерный массив из
положительных элементов исходного.

11.

• Образовать одномерный массив записав туда элементы двумерного массива,
которые больше среднего значения положительных элементов

12.

• Создать двумерный динамический массив из 56 элементов. Заполнить его
случайными значениями и вывести его на экран в прямоугольном виде.

13.

• Передача одномерного динамического массива в функцию

14.

• Передача двумерного динамического массива в функцию
English     Русский Rules