Возможна ли такая модель динамического распределения памяти c? И почему такая модель не используется?
Кто скажет, не используется ли такая модель памяти? Созданный мной язык программирования BASI C использует нечто подобное для ссылки на строки и массивы. строк в вашей таблице соответствуют StringDescriptors в моем BASI C.
Если такие системные вызовы alloc
и free
лучше выполнять в библиотеке, чем в как системный вызов?
Дело вкуса, но, поскольку распределение памяти настолько фундаментально, оно считает, что оно больше всего принадлежит ядру. Тогда, возможно, системный вызов с использованием инструкции int
...
Смещение, Размер, Состояние и Блоки.
Это то, что вы выбрали для размещения в своей таблице размещения. , Все, что вы вставили, также должно быть обновлено. Это лишняя работа, когда есть избыточная информация. Вы можете удалить информацию Size , потому что вы можете получить ее путем вычитания двух соседних указателей.
Вы также можете обойтись без информации Blocks , потому что она всегда будет 1 , если free()
немедленно объединяется, когда блоки FREE объединяются.
CE+0, USED ; Size is 7 == (CE+7) - (CE+0)
CE+7, USED ; Size is 10 == (CE+17) - (CE+7)
CE+17, FREE ; Size is 110 == (CE+127) - (CE+17)
CE+127, USED ; Size is 40 == (CE+167) - (CE+127)
CE+167, EOL ; TotalRowsCount = 5
Новое распределение 105 байтов:
CE+0, USED ; Size is 7 == (CE+7) - (CE+0)
CE+7, USED ; Size is 10 == (CE+17) - (CE+7)
CE+17, USED ; Size is 105 == (CE+122) - (CE+17)
CE+122, FREE ; Size is 5 == (CE+127) - (CE+122)
CE+127, USED ; Size is 40 == (CE+167) - (CE+127)
CE+167, EOL ; TotalRowsCount = 6
Свободное распределение 40 байтов:
CE+0, USED ; Size is 7 == (CE+7) - (CE+0)
CE+7, USED ; Size is 10 == (CE+17) - (CE+7)
CE+17, USED ; Size is 105 == (CE+122) - (CE+17)
CE+122, FREE ; Size is 45 == (CE+167) - (CE+122)
CE+167, EOL ; TotalRowsCount = 5