LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

У меня в структуре не было флага занятости. Он не особо то нужен. Просто в списке в принципе были только свободные блоки. Если блок есть в списке - значит он свободный. Занятые блоки тупо неизвестны менеджеру памяти, ему нет никакой нужды их учитывать, если мы не реализуем сантитайзер аллокаций.

Аллокация работала по принципу поиска первого блока размером больше запрошенного. Если он строго больше, то уменьшаем его размер, адрес отрезанного хвоста возвращаем пользователю (в начало хвоста пишем размер блока, чтобы free знал столько ему вернули). Если равен, то просто удаляем из списка и возвращаем его базовый адрес (опять же в начало пишем размер).

free смотрит в начале блока сколько байт ему вернули, а затем пытается впихнуть в список свободных блоков либо объединяя с одним или двумя свободными блоками, либо создавая новый.

Исправление KivApple, :

У меня в структуре не было флага занятости. Он не особо то нужен. Просто в списке в принципе были только свободные блоки. Если блок есть в списке - значит он свободный. Занятые блоки тупо неизвестны менеджеру памяти, ему нет никакой нужды их учитывать, если мы не реализуем сантитайзер аллокаций.

Аллокация работала по принципу поиска первого блока размером больше запрошенного. Если он строго больше, то уменьшаем его размер, адрес отрезанного хвоста возвращаем пользователю (в начало хвоста пишем размер блока, чтобы free знал столько ему вернули). Если равен, то просто удаляем и возвращаем его базовый адрес (опять же в начало пишем размер).

free смотрит в начале блока сколько байт ему вернули, а затем пытается впихнуть в список свободных блоков либо объединяя с одним или двумя свободными блоками, либо создавая новый.

Исправление KivApple, :

У меня в структуре не было флага занятости. Просто в списке в принципе были только свободные блоки. Если блок есть в списке - значит он свободный. Занятые блоки тупо неизвестны менеджеру памяти, ему нет никакой нужды их учитывать, если мы не реализуем сантитайзер аллокаций.

Аллокация работала по принципу поиска первого блока размером больше запрошенного. Если он строго больше, то уменьшаем его размер, адрес отрезанного хвоста возвращаем пользователю (в начало хвоста пишем размер блока, чтобы free знал столько ему вернули). Если равен, то просто удаляем и возвращаем его базовый адрес (опять же в начало пишем размер).

free смотрит в начале блока сколько байт ему вернули, а затем пытается впихнуть в список свободных блоков либо объединяя с одним или двумя свободными блоками, либо создавая новый.

Исправление KivApple, :

У меня в структуре не было флага занятости. Просто в списке в принципе были только свободные блоки. Если блок есть в списке - значит он свободный. Занятые блоки тупо неизвестны менеджеру памяти, ему нет никакой нужды их учитывать, если мы не реализуем сантитайзер аллокаций.

Аллокация работал по принципу поиска первого блока размером больше запрошенного. Если он строго больше, то уменьшаем его размер, адрес отрезанного хвоста возвращаем пользователю (в начало хвоста пишем размер блока, чтобы free знал столько ему вернули). Если равен, то просто удаляем и возвращаем его базовый адрес (опять же в начало пишем размер).

free смотрит в начале блока сколько байт ему вернули, а затем пытается впихнуть в список свободных блоков либо объединяя с одним или двумя свободными блоками, либо создавая новый.

Исходная версия KivApple, :

У меня в структуре не было флага занятости. Просто в списке в принципе были только свободные блоки. Если блок есть в списке - значит он свободный. Занятые блоки тупо неизвестны менеджеру памяти, ему нет никакой нужды их учитывать, если мы не реализуем сантитайзер аллокаций.