Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

OSDEV: Разработка аллокатора на С++ часть 4. mem_malloc_aligned

Дата публикации: 13-06-2026 18:47:25

Приветствую читатель!Для тех кто со мной впервые вот оглавление:Часть 1Часть 2Часть 3Код лежит тутПодразумевается что читатель знаком с архитектурой аллокатора из части 3 и понимает алгоритм неявного списка свободных блоков который был освещен в части 1Аллокатор работает стабильно, все тесты зеленые, включая тесты на стабильность. И следующим шагом логично бы реализовать перегрузки new и delete для abi, но вот незадача: там есть версии принимающие дополнительный аргумент, а именно выравнивание. Эту фичу я реализовать как раз забыл. В архитектуре которая рассматривается в предыдущей статье это оказалось простой, но интересной задачей. Ее мы и обсудим ниже.Решение потребовало реализации функции mem_malloc_aligned которая выделит бОльший кусок памяти с учетом запрошенного выравнивания что бы мы там точно нашли правильно выровненный адрес.Но что если адрес указателя из mem_malloc_aligned не совпадает с адресом указателя который вернул mem_malloc? Что делать в mem_free? Что делать в mem_realloc? Как мне работать с указателем перед которым не хедера?Для начала я решил применить технику добавления смещения перед payload выровненного блока вместо хедера, смещения до payload изначального блока у которого есть хедер и футер.Но как мне отличить offset от header? Я решил добавить magic number в хедер и футер увеличив тем самым размер оверхеда в 2 раза и раз уж от него считалось внутреннее выравнивание блоков памяти в аллокаторе и минимальный размер блока, то теперь минимальный размер блока стал 32 байта, а с оверхедом все 64. Теперь можно просто проверять magic number и если он не совпадает, то интерпретировать число на месте хедера как смещение до payload блока который вернул mem_malloc и далее получив на него указатель работать с блоком стандартным образом. Читать далее

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1OSDEV: Разработка аллокатора на С++ часть 5. osdev-libstdc0528-06-2026
2OSDEV: Разработка аллокатора на С++ часть 3. Финальный аллокатор со списками свободных блоков0509-06-2026
3osdev-libstdc: реализация std::atomic и spin_lock0528-06-2026
4Алиасинг памяти в C++: прошлое, настоящее, будущее0710-06-2026
5[Перевод] Структуры данных на практике. Глава 17: Структуры данных загрузчиков0529-06-2026
6OSDEV: Itanium часть 2: One-time Construction API и сигнлтоны Майерса0508-07-2026
7OSDEV: vsnprintf полная реализация без поддержки чисел с плавающей точкой0515-06-2026
8OSDEV: Itanium ABI часть 1: Array Operator new Cookies0504-07-2026
9[Перевод] Структуры данных на практике. Глава 16: Фильтры Блума и вероятностные структуры данных0828-06-2026
10С/С++ в современном машинном обучении: традиционные роли и возможности нового стандарта5719-06-2026

Классификация: Мнения. Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 5. Источник: habr.com.