Реализация различных аллокаторов памяти на C++ с поддержкой многопоточности и совместимостью со STL.
- Базовый интерфейс аллокатора с совместимостью со STL
- Pool Allocator для выделения блоков фиксированного размера
- Buddy Allocator для выделения блоков степени двойки
- Linear Allocator для последовательного выделения памяти
- Потокобезопасные реализации
- Поддержка выравнивания памяти
- Обеспечение безопасности исключений
- Выделение блоков фиксированного размера
- Аллокация и деаллокация за O(1)
- Потокобезопасность с использованием мьютексов
- Управление пулом памяти
- Блоки размером степени двойки
- Эффективное разделение и слияние блоков
- Система "бадди" для управления памятью
- Потокобезопасная реализация
- Последовательное выделение памяти из предварительно выделенного пула
- Поддержка выравнивания памяти
- Быстрая аллокация за 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