Files
fxalloc/headers/_FXAlloc.h
T

70 lines
3.2 KiB
C

#pragma once
#include "FXAlloc.h"
#include "mword.h"
typedef struct FXMemoryBlock FXMemoryBlock;
/**
* @brief Минимальная структурная единица - блок памяти
* В памяти расположены друг за другом с гарантированным выравниванием по void*
* Клиентский указатель указывает непосредственно за структуру
* fxalloc() → return (void*)(block + 1);
* fxfree() → FXMemoryBlock* block = (FXMemoryBlock*)_Ptr - 1;
* @property next: FXMemoryBlock* - Указатель на следующий свободный блок
* @property Индекс потока в глобальном пуле
* @property Индекс грейда в пуле конкретного потока
* */
struct FXMemoryBlock {
/// @brief Указатель на следующий свободный блок
FXMemoryBlock* next;
/// @brief Индекс потока в глобальном пуле
umword_t tid;
/// @brief Индекс грейда в пуле конкретного потока
umword_t gid;
};
struct FXMemoryBlock {
/// @brief Указатель на следующий свободный блок
FXMemoryBlock* next;
/// @brief Индекс потока в глобальном пуле
uint32_t tid;
/// @brief Индекс грейда в пуле конкретного потока
uint32_t gid;
};
/**
* @brief Минимальная структурная единица - блок памяти
* В памяти расположены друг за другом с гарантированным выравниванием по void*
* Клиентский указатель указывает непосредственно за структуру
* fxalloc() → return (void*)(block + 1);
* fxfree() → FXMemoryBlock* block = (FXMemoryBlock*)_Ptr - 1;
* @property next: FXMemoryBlock* - Указатель на следующий свободный блок
* @property Индекс потока в глобальном пуле
* @property Индекс грейда в пуле конкретного потока
* */
struct FXMemoryBlock {
/// @brief Указатель на следующий свободный блок
FXMemoryBlock* next;
/// @brief Полезные данные в блоке
uint32_t used;
/// @brief Индекс потока в глобальном пуле
uint16_t tid;
/// @brief Индекс грейда в пуле конкретного потока
uint16_t gid;
};
/// @brief Группа блоков одной градации
typedef struct FXGradedMemoryPool {
/// @brief Указатель на последний свободный блок
FXMemoryBlock* free;
/// @brief Всего блоков в данной группе
umword_t total;
/// @brief Количество преаллоцированных блоков
umword_t count_pre;
/// @brief Количество используемых блоков
mword_t used;
/// @brief Количество свободных блоков
mword_t free;
} FXMemoryPoolGrade;