Структуры данных, лекция-6: динамическая память, куча
Структуры данных, раздел - архитектура компьютера, память компьютера Динамическая память (куча) - Задача для рассмотрения: загрузить содержимое файла в массив, размер файла заранее не известен, загрузку хотим провести в подпрограмме - Вариант решения 1: простой массив фиксированного размера внутри подпрограммы (не годится) - Итог варианта 1: почему нельзя возвращать указатель на локальную переменную из подпрограммы - Вариант решения 2: массив переменной длины (VLA) внутри подпрограммы - Итог варианта 2: массив переменной длины создаётся на стеке, поэтому возвращать указатель на него всё равно нельзя - Массивы переменной длины (variable length array - VLA) - Сегменты памяти приложения, новый сегмент - куча (heap) - Вариант решения 3: выделение и освобождение памяти на куче - функции malloc и free - Расположение динамического массива в памяти: почему из подпрограммы можно возвращать указатель на динамический массив - Повторное освобождение памяти - Итог варианта 3: такой способ годится - Документация: GCC, GNU C, GNU C Library (glibc), glibc malloc internals (внутреннее устройство glibc malloc) - Нехватка памяти: переполнение стека, нехватка памяти на куче, нехватка памяти при создании массива VLA - Фрагментация памяти на куче - Утечка памяти - VLA vs malloc - Решение исходной задачи: загрузим в массив настоящий файл - Замечание: VLA и порядок размещения переменных на стеке - Задание для самостоятельной работы
Название:
Структуры данных, лекция-6: динамическая память, куча
Категория:
Разное