- •Структура платформы .NET
- •Схема выполнения программы в .NET
- •Схема работы компиляторов .NET
- •Достоинства языка С++
- •Структура программы
- •Модификаторы памяти
- •Пространство имен
- •Константы
- •Описание идентификаторов
- •Операции С++
- •Правила преобразования типов
- •Функции
- •ПЕРЕГРУЗКА ФУНКЦИЙ
- •Неоднозначность перегрузки
- •Шаблоны функций
- •Явная спецификация типов
- •Оперативная память
- •В адресном пространстве каждого процесса содержится:
- •Виртуальная память может находиться в трех состояниях
- •Средства защиты памяти
- •Страничное преобразование
- •ПРИМЕР РАБОТЫ С УКАЗАТЕЛЯМИ
- •Еще один пример с указателями
- •Утечки памяти
- •Процесс сборки мусора
- •Сборка мусора. Поколения объектов
- •Особенности ОС Windows
- •Процесс и поток
- •Очереди сообщений
- •Структура сообщения
- •Cпособы создания интерактивных Win приложений в VS C++
- •Функция WinMain
- •Создание окна
- •Функция окна
- •Цикл обработки сообщения
- •Определение запущенной копии приложения
- •Пример приложения
- •Команды передачи данных
- •Арифметические команды:
- •Каркас программы
- •Стековый фрейм
- •Парадигмы программирования
- •Элементы объектной модели
- •Преимущества объектной модели
- •Ограничения доступа
- •Спецификатор памяти static
- •Спецификатор const
- •Указатель this
- •Дружественные функции
- •Основные свойства и правила использования спецификатора friend:
- •Наследование
- •Основные правила использования базовых и производных классов:
- •Наследование атрибутов компонентов базового класса:
- •Множественное наследование
- •Использование виртуального класса
- •Полиморфизм
- •ПРОЦЕСС
- •Структура процесса
- •Поток (thread)
- •Создание и работа с потоками
- •Создание потока
- •Завершение потока
- •Совместимость потоков и стандартной библиотеки
- •Синхронизация потоков ПРИМЕР1
- •Как можно приостановить работу потока?
- •ПРИМЕР 2
- •Объекты синхронизации
- •Мьютекс. ПРИМЕР3
- •Критические секции ПРИМЕР4
- •События. ПРИМЕР5
- •Семафоры. ПРИМЕР6
- •Структура описания технологической операции
- •Типы программ
- •Жизненный цикл программного обеспечения
- •Структура процессов ЖЦПО
- •Стратегии конструирования ПО
- •Водопадная модель ЖЦПО
- •Макетирование
- •Спиральная модель БОЭМА
- •Инкрементальная модель
- •Модель быстрой разработки приложений (RAD)
- •Схема процесса XP.
- •Эксплуатационные требования к программным продуктам
Еще один пример с указателями
pppi = new int **; ppi = new int *; pi = new int ; *pppi=ppi;
*ppi=pi; // ppi=π утечкапамяти
***pppi=5;
cout << "*pi=" << *pi << "\n"; delete pppi; delete ppi; delete pi;
Результат:
*pi=5
0x12ff88
0x12ff80
0x12ff78
0x12ff70
i // int
j // int
pi // int *
0x8f5dc8
pj // int *
ppi // int **
0x8f5db8
ppj // int **
pppi // int ***
0x8f5da8
pppj // int ***
HEAP
new int
0x8f5dc8 5
*pi
new int *
0x8f5db8 0x8f5dc8
*ppi new int**
0x8f5da8 0x8f5db8
*pppi
**pppi ***pppi **ppi
Демонстрация работы с динамической памятью через функции new и delete на примере выделения памяти под динамический двумерный массив целых чисел.
#include <malloc.h> #include <iostream>
void out(int** mas); // вывод массивана экран
void clear_mem(int** mas); // очистка intn=2; // числострок
intm=3; // числостолбцов int main()
{
int**d; inti,j;
d = newint* [n]; // выделяем память под //указатели настроки
for ( i=0; i<n; i++) // выделяемпамять под
//указатели настолбцы d[i]=new int[m];
// инициализациямассива for ( i=0; i<n; i++)
for ( j=0; j<m; j++) {d[i][j]=i+j;} out(d); clear_mem(d);
return 0;
}
void out (int **d)
{
for (inti = 0; i < n; i++)
{ for (intj = 0; j < m; j++) std:: cout<< d[i][j] << " "; std::cout << "\n";}
}
void clear_mem(int **d)
{
for (inti = 0; i < n; i++) delete[] d[i]; // освобождаются
//столбцы delete[] d; // освобождаются
//указатели настроки
}
Алгоритмы для управления областями памяти
1.для объектов одного типа: менеджер объектов или stab-аллокатор.
2.для объектов одного размера: битовые маски или алгоритм "близнецов".
3.для объектов произвольного размера и типа метод граничныхмаркеров.
Менеджеробъектов
Список свободных объектов
O[n]
…
O[2]
O[0][1]
O[0]
Область памяти
Алгоритм битовоймаски
0 |
|
1 |
ХХХХХХХХХХХХ |
10 |
ХХХХХХХХХХХХХ |
0 |
|
0 |
|
1 |
ХХХХХХХХХХХХ |
0 |
|
Метод граничных маркеров
Структура элемента памяти
Флаг |
Размер |
|
Следу |
Преды |
Элемент памяти |
|
|
|
Конец |
|||||
занятости |
блока |
|
ющий |
дущий |
|
|
|
|
блока |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0xfffff |
|
|
|
|
|
|
|
|
|
|
|
|
||
1 |
|
0х000f |
|
0xffff0 |
|
|
|
Элемент памяти |
end |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 0х0ff0 |
0xfffff |
Элемент памяти |
end |
0xff000