ПОСТАНОВКА ФУНДАМЕНТАЛЬНОЙ ЗАДАЧИ Определение: Задача выделения блока памяти размера n из пула свободных блоков сводится к поиску блока B в множестве свободных блоков F такого, что: размер (B) ≥ n (достаток) B минимизирует некоторые функции стоимости...
ПОСТАНОВКА ФУНДАМЕНТАЛЬНОЙ ЗАДАЧИ
Определение: Задача выделения блока памяти размера n из пула свободных блоков сводится к поиску блока B в множестве свободных блоков F такого, что:
размер (B) ≥ n (достаток)
B минимизирует некоторую функцию стоимости C(B, n) (оптимальность)
Набор свободных блоков представлен в виде:
F = {B_i = (addr_i, size_i) | B_i свободен, 0 ≤ i < m}
где addr_i — начальный адрес, size_i — размер блока.
Но сначала давайте разберемся, что такое стек и куча.
1. Концептуальное подразделение: менеджер против местоположения
Память физически хранится в оперативной памяти, и процессор обращается к ней по адресам. Термины «стек» и «куча» — это не физические области на кристаллах, а логические модели организации доступа к памяти внутри виртуального адресного пространства процесса.
Стек — это модель LIFO (Last In, First Out), тесно привязанная к потоку выполнения (потоку). Его основная задача — хранить контекст вызова функции: аргументы, локальные переменные, адреса возврата. Его структура предсказуема и управляется компилятором и аппаратным обеспечением (регистр указателя стека — SP/ESP/RSP).
Heap — это модель произвольного доступа. Его задача — предоставить блоки памяти, время жизни которых не привязано к вложенности вызовов функций. Это м
