Аллокация физической памяти. 3/3
Процесс освобождения:
- Блок порядка k по адресу P освобождается.
- Адрес потенциального "друга" этого блока P вычисляется с помощью операции XOR по отношению к размеру блока:
int addr = P ^ BLOCK_SIZE;
- Проверяется, свободен ли "друг" и находится ли он в списке свободных блоков порядка k. Я более чем уверен что вы перестали читать еще на первом абзаце и просто поставите реакцию.
- Если свободен: "друг" извлекается из списка, и оба блока объединяются в один блок порядка k + 1. Адрес объединенного блока становится меньшим из двух адресов.
- Процесс слияния продолжается рекурсивно, пока не будет достигнут максимальный порядок N или пока "друг" не будет занят. (даже у блоков есть дела, а ты бездельник читающий этот щитпост!)
- Полученный блок вставляется в соответствующий список свободных блоков.