📱 Подписаться
IT и цифровая трансформация

OSDEV: Разработка аллокатора на С++ часть 5. osdev-libstdc

📰 Habr 👁️ 0 просмотров

GNU_Dimarik5 часов назад

OSDEV: Разработка аллокатора на С++ часть 5. osdev-libstdc

Уровень сложностиПростойВремя на прочтение1 минОхват и читатели4.4KC*C++*ОбзорПриветствую!

Это обзорная статья на этот раз совсем простая. Используется уже написанный аллокатор. Я лишь ставлю в известность читателей о существовании в osdev-libstdc вполне стандартных функций aligned_alloc, malloc, calloc, realloc и free. Их реализация примитивна:

namespace { static dux::spin_lock gLock; }

__MAYBE_BEGIN_STD_NAMESPACE

void *aligned_alloc(size_t alignment, size_t size)
{
__STD_NAMESPACE::lock_guard g(gLock);
return mem_malloc_aligned(alignment, size);
}

void *calloc(size_t num, size_t size)
{
__STD_NAMESPACE::lock_guard g(gLock);
return mem_calloc(num, size);
}

void free(void *ptr)
{
__STD_NAMESPACE::lock_guard g(gLock);
mem_free(ptr);
}

void *malloc(size_t size)
{
__STD_NAMESPACE::lock_guard g(gLock);
return mem_malloc(size);
}

void *realloc(void *ptr, size_t new_size)
{
__STD_NAMESPACE::lock_guard g(gLock);
return mem_realloc(ptr, new_size);
}Думаю на этом я могу поставить жирную точку на реализации аллокатора для malloc для свой ОС.

Дальше уже пишем ABI с частями libcxxrt. Думаю даже demangler приделается без проблем с такой osdev-libstdc ...

Далее new/delete.

До новых встреч!Теги:• osdev
• malloc
• realloc
• free
• аллокатор
• спинлокХабы:• C
• C++

Получайте больше инсайтов о систематизации бизнеса

Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности

💬 Подписаться на канал