Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.

Презентация:



Advertisements
Похожие презентации
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Advertisements

Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Время жизни и области видимости программных объектов Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ.
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Распределение памяти. Динамическое выделение памяти.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 2 Время жизни и области видимости программных объектов (весенний семестр 2012 г.) Доцент Кафедры вычислительных.
В языках высокого уровня обращение к ячейкам памяти происходит не через числовые адреса, а посредством описательных имен. Такие имена называются переменными.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Структуры и объединения Structures and unions НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
ЛЕКЦИЯ 7 КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ ОБЪЕКТОВ.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Под объявлением одномерного динамического массива понимают объявление указателя на переменную заданного типа для того, чтобы данную переменную можно.
Элементы ЯПВУ. УКАЗАТЕЛИ. C / С++ Pascal Вся динамическая память в Pascal это сплошной массив байтов (куча). Адрес начала кучи храниться в переменной HeapOrg,
Транксрипт:

Лекция 14 Динамические данные

Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала работы программы, на стадии компиляции и сборки.

Статическая память Существуют два типа статических переменных: Глобальные переменные (определенные вне функций): … int max_num = 100; … void main() { … } Статические переменные (определенные со словом static): void main() { … static int max = 100; … }

Локальные переменные Локальные (или стековые) переменные – это переменные определенные внутри функции (или блока): void my_func() { … int n = 0; … if (n != 0) { int a[] = {0, 2, 4, 5}; … } … } Память выделяется в момент входа в функцию или блок и освобождается в момент выхода из функции или блока.

Динамическая память Недостаток статической или локальной памяти: количество выделяемой памяти вычисляется на этапе компиляции и сборки. Использование динамической памяти позволяет избавиться от данного ограничения.

Выделение и освобождение памяти Выделение памяти: void* malloc(size_t n); n – размер памяти в байтах возвращаемое значение: указатель на выделенную память Освобождение памяти: void free(void *p); p – указатель на память, которую необходимо освободить

Динамические массивы Пример. Ввести с клавиатуры n чисел (n задается пользователем) и вывести их в обратном порядке. Неправильный способ решения задачи (с использованием локальной переменной массива) : void main() { int n,i; scanf(%d, &n); /* вводим кол-во чисел */ int a[n]; /* ошибка. */ for (i = 0; i < n; i++) scanf(%d, &a[i]); for (i = n-1; n >=0; i--) printf(%5d, a[n]); }

Динамические массивы Правильный способ решения задачи (с использованием динамической переменной массива): void main() { int n,i; scanf(%d, &n); /* вводим кол-во чисел */ /* выделяем память под массив */ int *a = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) scanf(%d, &a[i]); for (i = n-1; n >=0; i--) printf(%5d, a[n]); free(a); /* освобождаем память */ }

Динамические структуры Выделение памяти под структуру: struct * = (struct *) malloc(sizeof( )); Освобождение памяти: free( ); Опишем структуру: struct student { char name[50]; int grade; int group; };

Массивы динамически создаваемых структур Пример. Формирование массива из динамически создаваемых структур. void main() { /* Объявляем массив студентов */ struct student* a[100] = {NULL}; int i,n; scanf(%d, &n); /* n - количество студентов */ for (i = 0; i < n; i++) { /* резервируем память */ student[i] = (struct student*)malloc( sizeof(student)); scanf(%50s %d %d, student[i]->name, &student[i]->age, &student[i]->grade); } … }

Динамические массивы структур Пример. Формирование динамического массива из структур. void main() { /* Объявляем массив студентов */ struct student* a; int i,n; scanf(%d, &n); /* n - количество студентов */ /* резервируем память */ a = (struct student* a) malloc( n * sizeof(struct student a)); for (i = 0; i < n; i++) { scanf(%50s %d %d, student[i].name, &student[i].age, &student[i].grade); } … }

Динамические структуры данных Использование динамической памяти позволяет создавать динамические структуры данных: Cписки (однонаправленные и двунаправленные) Деревья struct student { char name[50]; int grade; int group; struct student* next; /* указывает на следующую структуру */ };

Однонаправленный (односвязный) список next student next student next student … NULL Начало списка

Двунаправленный список next student next student next student … NULL Начало списка previous NULL Конец списка

Бинарные деревья

«Дорожная карта» Что дальше? Язык Си С++JavaObjective C Perl PHP C#, J#