Skip to content

JlwxdQueen/AdvancedAllocator

Repository files navigation

Advanced Allocator

Реализация различных аллокаторов памяти на C++ с поддержкой многопоточности и совместимостью со STL.

Возможности

  • Базовый интерфейс аллокатора с совместимостью со STL
  • Pool Allocator для выделения блоков фиксированного размера
  • Buddy Allocator для выделения блоков степени двойки
  • Linear Allocator для последовательного выделения памяти
  • Потокобезопасные реализации
  • Поддержка выравнивания памяти
  • Обеспечение безопасности исключений

Реализованные аллокаторы

Pool Allocator

  • Выделение блоков фиксированного размера
  • Аллокация и деаллокация за O(1)
  • Потокобезопасность с использованием мьютексов
  • Управление пулом памяти

Buddy Allocator

  • Блоки размером степени двойки
  • Эффективное разделение и слияние блоков
  • Система "бадди" для управления памятью
  • Потокобезопасная реализация

Linear Allocator

  • Последовательное выделение памяти из предварительно выделенного пула
  • Поддержка выравнивания памяти
  • Быстрая аллокация за O(1)
  • Отсутствие фрагментации памяти
  • Функция reset() для освобождения всей памяти
  • Идеален для временных выделений в рамках одного кадра/сессии

Использование

#include "allocator.h"
#include "pool_allocator.h"
#include "buddy_allocator.h"
#include "linear_allocator.h"

// Создание Pool Allocator с блоками по 1024 байта
PoolAllocator pool(1024, 10);  // 10 блоков по 1024 байта каждый

// Создание Buddy Allocator с максимальным блоком 4096 байт
BuddyAllocator buddy(4096);

// Создание Linear Allocator с пулом 2048 байт
LinearAllocator linear(2048);

// Выделение памяти
void* ptr1 = pool.allocate(512);  // Получаем блок 1024 байта
void* ptr2 = buddy.allocate(100); // Получаем блок 128 байт
void* ptr3 = linear.allocate(256, 8); // Получаем 256 байт с выравниванием 8

// Освобождение памяти
pool.deallocate(ptr1);
buddy.deallocate(ptr2);
// linear.deallocate(ptr3); // Не поддерживается в Linear Allocator

// Сброс Linear Allocator для освобождения всей памяти
linear.reset();

Сборка

chmod +x ./scripts/build.sh
./scripts/build.sh #regular build
./scripts/build.sh --clean #clean build

Требования

  • C++17 или новее
  • CMake 3.10 или новее

Лицензия

MIT License

About

Advanced Allocator system for C++

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published