70 lines
3.2 KiB
C
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; |