Динамическая память. Указатели в С++

Содержание

Слайд 2

Оперативная память Статическая память - выделяется при запуске программы для размещения

Оперативная память

Статическая память - выделяется при запуске программы для размещения глобальных и статических объектов,

а также объектов, определённых в пространствах имён.
Автоматическая память - резервируется при запуске программы для размещения локальных объектов. Автоматическую память часто называют стеком.
Динамическая память  - выделяется из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов.
Слайд 3

В адресном пространстве каждого процесса содержится: образ ЕХЕ-файла программы; все несистемные

В адресном пространстве каждого процесса содержится:

образ ЕХЕ-файла программы;
все несистемные DLL, загруженные

вашей программой;
глобальные данные программы (как доступные для чтения и записи, так и предназначенные только для чтения);
стек программы;
динамически выделяемая память, в том числе куча Windows и куча библиотеки С периода выполнения ( CRT);
блоки памяти, совместно используемые несколькими процессами;
локальная память отдельных выполняемых потоков;
всевозможные особые системные блоки памяти, в том числе таблицы виртуальной памяти;
ядро, исполнительная система и DLL-компоненты Windows.
Слайд 4

Виртуальное пространство FLAT -модели

Виртуальное пространство FLAT -модели

Слайд 5

Виртуальная память может находиться в трех состояниях Свободная. Ссылки на блок

Виртуальная память может находиться в трех состояниях

Свободная. Ссылки на блок памяти отсутствуют,

и он доступен для выделения.
Зарезервировано. Блок памяти доступен для использования разработчиком и не может использоваться для какого-либо другого запроса на выделение. Однако сохранение данных в этот блок памяти невозможно, пока он не будет выделен.
Выделена. Блок памяти назначен физическому хранилищу.
Виртуальное адресное пространство может стать фрагментированным.
Слайд 6

Средства защиты памяти Объектно-ориентированная защита памяти. Каждый раз, когда процесс открывает

Средства защиты памяти

Объектно-ориентированная защита памяти. Каждый раз, когда процесс открывает

указатель на блок адресов, монитор ссылок безопасности проверяет, разрешен ли доступ процесса к данному объекту.
Отдельное адресное пространство для каждого процесса. Аппаратура запрещает процессу доступ к физическим адресам другого процесса.
Два режима работы: режим ядра, в котором процессам разрешен доступ к системным данным, и пользовательский режим, в котором это запрещен.
Страничный механизм защиты. Каждая виртуальная страница имеет набор признаков, который определяет разрешенные типы доступа в пользовательском режиме и в режиме ядра.
Принудительная очистка страниц, освобождаемых процессами.
Слайд 7

Страничное преобразование Элемент таблицы страниц (Page Table Element)

Страничное преобразование

Элемент таблицы страниц (Page Table Element)

Слайд 8

Страничное преобразование 32-разрядный виртуальный адрес в ОС Windows разбивается на три

Страничное преобразование

32-разрядный виртуальный адрес в ОС Windows разбивается на три части:
Старшие

10 разрядов адреса определяют номер одного из 1024 элементов в каталоге страниц, адрес которого находится в регистре процессора CR3. Этот элемент содержит физический адрес таблицы страниц.
Следующие 10 разрядов линейного адреса определяют номер элемента таблицы. Элемент, в свою очередь, содержит физический адрес страницы виртуальной памяти.
Размер страницы - 4 Кбайт, и младших 12 разрядов линейного адреса как раз хватает (212 = 4096), чтобы определить точный физический номер адресуемой ячейки памяти внутри этой страницы.
Слайд 9

Элемент таблицы страниц Защита – Win32 API поддерживает ряд значений, в

Элемент таблицы страниц

Защита – Win32 API поддерживает ряд значений, в том

числе: PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE.
Базовый физический адрес страницы в памяти.
Pagefile – индекс используемого файла подкачки (один из 16 возможных в системе файлов).
State – состояние страницы в системе:
T (Transition) – отмечает страницу как переходную;
D (Dirty) – страница, в которую была произведена запись;
P (Present) – страница присутствует в ОП или находится в файле подкачки.
Слайд 10

#include void *malloc( size_t size); char * str; int * count;

#include
void *malloc( size_t size);
char * str;
int * count;
str = (char

*) malloc (5); // отводится 5*sizeof(char) байт
count = (int *) malloc (10*sizeof(int)); // отводится 10*sizeof(int) байт
free(str); // освобождение памяти
free(count);
void *calloc(size_t nitem, size_t size);
char * str;
int * count;
str = (char *) calloc (10, sizeof(char));
count = (int *) calloc (5, sizeof(int));
char far *fptr;
fptr = (char far *) farmalloc(10);
Farfree(fptr);
void *realloc(void *block, size_t size);
count = (int *) realloc (count, 10*sizeof(int));
Слайд 11

Операторы new и delete имеют две формы: управление динамическим размещением в

Операторы new и delete имеют две формы:
управление динамическим размещением в

памяти единичного объекта:
int * p= new int;
delete p;
динамическое размещение массива объектов:
int * p= new int[100];
delete[] p;
Слайд 12

#include #include void out(int ** mas); // вывод массива на экран

#include
#include
void out(int ** mas); // вывод массива на экран
void

clear_mem(int ** mas); // очистка
int n=2; // число строк
int m=3; // число столбцов
int main()
{
int ** d;
int i,j;
d = new int* [n]; // выделяем память под //указатели на строки
for ( i=0; i d[i]=new int [m];
// инициализация массива
for ( i=0; i for ( j=0; j {d[i][j]=i+j;}
out(d);
clear_mem(d);
return 0;
}

void out (int **d)
{
for (int i = 0; i < n; i++)
{ for (int j = 0; j < m; j++)
std:: cout << d[i][j] << " ";
std::cout << "\n";}
}
void clear_mem(int **d)
{
for (int i = 0; i < n; i++)
delete[] d[i]; // освобождаются //столбцы
delete[] d; // освобождаются //указатели на строки
}

Демонстрация работы с динамической памятью через функции new и delete на примере выделения памяти под динамический двумерный массив целых чисел.

Слайд 13

Алгоритмы для управления областями памяти для объектов одного типа: менеджер объектов

Алгоритмы для управления областями памяти
для объектов одного типа: менеджер объектов

или stab-аллокатор.
для объектов одного размера: битовые маски или алгоритм "близнецов".
для объектов произвольного размера и типа метод граничных маркеров.
Слайд 14

Менеджер объектов Список свободных объектов Область памяти O[0]

Менеджер объектов

Список свободных объектов

Область памяти

O[0]

Слайд 15

Алгоритм битовой маски ХХХХХХХХХХХХХ 1

Алгоритм битовой маски

ХХХХХХХХХХХХХ

1

Слайд 16

Метод граничных маркеров Структура элемента памяти 0xfffff 0xff000

Метод граничных маркеров

Структура элемента памяти

0xfffff

0xff000

Слайд 17

Утечки памяти #define _CRTDBG_MAP_ALLOC #include #include /* _DEBUG _CrtDumpMemoryLeaks(); _CrtMemState s1;

Утечки памяти

#define _CRTDBG_MAP_ALLOC
#include
#include /* _DEBUG
_CrtDumpMemoryLeaks();
_CrtMemState s1;
_CrtMemCheckpoint( &s1 ); 
_CrtMemDumpStatistics( &s1

);
Слайд 18

Структура платформы .NET Платформа .NET Каркас .NET Framework Библиотека классов каркаса

Структура платформы .NET

Платформа .NET

Каркас .NET Framework

Библиотека классов каркаса (FCL)

Операционная система

Общеязыковая среда

выполнения (CLR)

Базовые классы среды

Классы для работы с данными и XML

Web-службы

Интерфейс пользователя

Среда разработки приложений Visual Studio.NET

.NET Enterprise Servers

.NET Building Block Services

Аппаратные средства компьютера

Удаленная обработка

Общая система типов (CTS)

Слайд 19

Общеязыковая исполнительная среда (CLR) Двухэтапная компиляция Виртуальная машина Сборщик мусора - Garbage Collector

Общеязыковая исполнительная среда (CLR)

Двухэтапная компиляция
Виртуальная машина
Сборщик мусора - Garbage Collector

Слайд 20

Схема выполнения программы в .NET Компилятор Загрузчик классов

Схема выполнения программы в .NET

Компилятор

Загрузчик классов

Слайд 21

Процесс сборки мусора Этап маркировки, выполняющий поиск всех используемых объектов и

Процесс сборки мусора

Этап маркировки, выполняющий поиск всех используемых объектов и составляющий

их перечень.
Этап перемещения, обновляющий ссылки на сжимаемые объекты.
Этап сжатия, освобождающий пространство, занятое неиспользуемыми объектами и сжимающий выжившие объекты (объекты, которые не уничтожаются при сборке мусора).