logo search
ЯП / ЯП / ЯП экзамен

Распределение памяти при выполнении программы.

Распределение памяти

Программа обычно помещается в отдельную непрерывную область памяти.

  1. Код константы

  2. Статические данные

  3. Куча

  4. Динамическая область памяти

  5. Стек

Поскольку области кода констант и статических данных умеют фиксированные размеры, они распределяются в начале памяти. Две области переменной длины – Куча и стек помещаются в противоположные концы остающейся памяти. При таком способе, если программа использует большой стек во время одной фазы вычисления и большую кучу во время другой фазы, то меньше шансов что памяти окажется недостаточно.

Malloc – возвращает нетипизированный указатель, который должен быть явно приведен к требуемому типу данных.

Free – освобождение памяти.

New - выделение.

Delete – освобождение.

Компонент исполняющей системы, который выделяет и освобождает память, называется менеджером кучи.

Это делается посредством поддержки списка свободных блоков памяти. Когда сделан запрос на выделение памяти, она ищется в этом списке, а при освобождении блок снова присоединяется к списку свободных блоков. Таким образом, возникает проблема фрагментации памяти, за которой так же должен следить менеджер кучи. С помощью виртуальной памяти, менеджер кучи может выделять память почти бесконечно, не сталкиваясь с проблемой фрагментации.

  1. Куча. Менеджер кучи. Фрагментация динамической памяти.

  1. Концепция виртуальной памяти. Страничная организация памяти.

  1. Сегментный принцип организации памяти. Сегментация памяти.

  1. Указатели. Операции над указателями. Типизированные и нетипизированные указатели.

Указатели

Переменная, значением которой является адрес другой переменной. Объект на который указывают называется указуемым, или обозначаемым объектом. Для описания указателей используется операция косвенной адресации. & указывает, что нам нужен адрес, а не значение переменной. Указатели применяются скорее для вычисления с адресами ячеек, чем с их содержимым. Разница между переменной указателем и указуемым объектом.

Различия между указателем константой и указателем на константный указуемый объект.

Типизированные указатели не явно могут быть преобразованы в указатели на void, но не обратно.

Указатели нужны для реализации динамических структур данных, например списков, деревьев и т.д.