NeurOX 1.0.0 dev-in-progress
Экосистема многопользовательской игры классические крестики-нолики с ИИ
Загрузка...
Поиск...
Не найдено
_FXAlloc.h
См. документацию.
1#pragma once
9#include "FXAlloc.h"
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <stdalign.h>
16#include <stdlib.h>
17
18
19typedef struct FXMemoryBlock FXMemoryBlock;
20typedef struct FXGradePool FXGradePool;
21
22#if defined(_I_UNDERSTAND_THAT_I_SHOULD_NEVER_CHANGE_THESE_POINTERS_) && defined(__FXALLOC_TURBO)
23
24/*===================================================================================================*
25 * !!! Опасный режим !!! *
26 * Сугубо для отпрофилированных серверов. Режим глубокого профилирования не доступен. *
27 *===================================================================================================*/
28 #pragma pack(push, 16)
32 struct FXMemoryBlock {
35 uint8_t data[];
36 };
37 #pragma pack(pop)
38
39 #pragma pack(push, 16)
44 struct FXGradePool {
45 _Atomic FXMemoryBlock* lifo;
46 uint32_t ntotal;
47 int32_t nmalloced;
48 };
49 #pragma pack(pop)
50
51#else
52/*===================================================================================================*
53 * Режим работы в формате профилировщика с возможностью расширенной статистики *
54 *===================================================================================================*/
55#pragma pack(push, 16)
67#pragma pack(pop)
68
69#pragma pack(push, 8)
78 _Atomic uint32_t ntotal;
79 _Atomic int32_t nbusy;
80 uint32_t nprealloc;
81 uint32_t nalloc;
82 uint32_t vref;
83};
84#pragma pack(pop)
85
86#endif //__FXALLOC_TURBO
87
88#pragma pack(push, 8)
93typedef struct FXThreadPool {
94 void* (**curr_alloc)(size_t NBytes);
95 void (**curr_free)(void* Ptr);
97 uint32_t isActive;
98 uint32_t ngrades;
101#pragma pack(pop)
102
111
112
113/*=====================================================================================================*
114 * Работа аллокатора в режиме проксирования. Эти функции работают только если не определён макрос *
115 *=====================================================================================================*/
121#ifndef _I_UNDERSTAND_THAT_I_SHOULD_NEVER_CHANGE_THESE_POINTERS_
123 extern TLS void* (*thread_alloc)(size_t NBytes);
125 extern TLS void (*thread_free)(void* Ptr);
126
136 void* fxalloc_proxy_alloc(size_t NBytes);
137
143 void fxalloc_proxy_free(void* Ptr);
144#endif //_I_UNDERSTAND_THAT_I_SHOULD_NEVER_CHANGE_THESE_POINTERS_
145
146
147/*=====================================================================================================*
148 * Локальные потоковые переменные *
149 *=====================================================================================================*/
154extern TLS FXThreadPool* thread_pool;
166/*=====================================================================================================*
167 * Инициализаторы *
168 *=====================================================================================================*/
175void* fxalloc_ungraded_alloc_init(size_t NBytes);
176
177/*=====================================================================================================*
178 * Функции выделения памяти *
179 *=====================================================================================================*/
181void* fxalloc_shifted_speed(size_t NBytes);
182
184void* fxalloc_shifted_summary(size_t NBytes);
185
186#ifndef __FXALLOC_TURBO // Обычный режим
188 void* fxalloc_shifted_full(size_t NBytes);
189#endif //__FXALLOC_TURBO
190
192void* fxalloc_binary_speed(size_t NBytes);
193
195void* fxalloc_binary_summary(size_t NBytes);
196
197#ifndef __FXALLOC_TURBO // Обычный режим
199 void* fxalloc_binary_full(size_t NBytes);
200#endif //__FXALLOC_TURBO
201
202
204void* fxalloc_linear_speed(size_t NBytes);
205
207void* fxalloc_linear_summary(size_t NBytes);
208
209#ifndef __FXALLOC_TURBO // Обычный режим
211 void* fxalloc_linear_full(size_t NBytes);
212#endif //__FXALLOC_TURBO
213
214/*=====================================================================================================*
215 * Функции освобождения памяти(возврат в пул) *
216 *=====================================================================================================*/
218void* fxfree_speed(void* Ptr);
219
221void* fxfree_summary(void* Ptr);
222
224void* fxfree_full(void* Ptr);
225
226
227#ifdef __cplusplus
228}
229#endif
Публичный интерфейс модуля аллокатора-профилировщика для серверных очередей/пакетов
eXFAllocSearchType
Варианты настройки алгоритма поиска подходящего грейда для данного потока В случае если первой в пото...
Definition FXAlloc.h:164
eFXAllocProfile
Перечисление режимов работы аллокатора.
Definition FXAlloc.h:175
TLS void(* thread_free)(void *Ptr)
Указатель на активную функцию аллокации
void * fxalloc_proxy_alloc(size_t NBytes)
Прокси-функция аллокации
void * fxalloc_linear_summary(size_t NBytes)
Выделение блока. Режим: поверхностное профилирование. Алгоритм поиска: линейный поиск.
void * fxfree_summary(void *Ptr)
Возврат блока в пул. Режим: поверхностное профилирование
void * fxalloc_linear_speed(size_t NBytes)
Выделение блока. Режим: скорость. Алгоритм поиска: линейный поиск.
void * fxalloc_ungraded_alloc_init(size_t NBytes)
Функция для инициализации грейдов по-умолчанию
void * fxalloc_shifted_summary(size_t NBytes)
Выделение блока. Режим: поверхностное профилирование. Алгоритм поиска: сдвиг битов размера.
void * fxfree_speed(void *Ptr)
Возврат блока в пул. Режим: скорость
TLS FXThreadPool * thread_pool
Указатель на пул данного потока Изначально равен NULL, инициализируется при первом вызове fxalloc или...
TLS eXFAllocSearchType search_type
Переменная хранящая тип поиска для функций выеления памяти в данном потоке При первом вызове fxalloc ...
void * fxalloc_binary_speed(size_t NBytes)
Выделение блока. Режим: скорость. Алгоритм поиска: бинарный поиск.
void fxalloc_proxy_free(void *Ptr)
Прокси-функция высвобождения
void * fxalloc_shifted_speed(size_t NBytes)
Выделение блока. Режим: скорость. Алгоритм поиска: сдвиг битов размера.
void * fxalloc_binary_summary(size_t NBytes)
Выделение блока. Режим: поверхностное профилирование. Алгоритм поиска: бинарный поиск.
TLS eFXAllocProfile thread_profile
Текущий профиль потока FXALLOC_SPEED | FXALLOC_SUMMARY | FXALLOC_FULL.
void * fxfree_full(void *Ptr)
Возврат блока в пул. Режим: глубокое профилирование
Глобальный пул памяти
Definition _FXAlloc.h:107
fxsync_t mutex
Мьютекс для синхронизации при инициализации для локального пула
Definition _FXAlloc.h:109
FXThreadPool ** pools
Массив указателей на пулы потоков, заканчивается NULL.
Definition _FXAlloc.h:108
Элемент пула потока выделяемый для градации
Definition _FXAlloc.h:74
uint32_t nalloc
Блоков алоцировано через malloc
Definition _FXAlloc.h:81
FXMemoryBlock * list
Список аллоцированных блоков
Definition _FXAlloc.h:76
_Atomic uint32_t ntotal
Блоков всего
Definition _FXAlloc.h:78
_Atomic int32_t nbusy
Блоков занято
Definition _FXAlloc.h:79
FXMemoryBlock * prealloced
Преаллоцированные блоки
Definition _FXAlloc.h:77
_Atomic FXMemoryBlock * lifo
Стэк свободных блоков
Definition _FXAlloc.h:75
uint32_t vref
Definition _FXAlloc.h:82
uint32_t nprealloc
Блоков преаллоцировано
Definition _FXAlloc.h:80
Метаданные отдельного блока памяти
Definition _FXAlloc.h:59
FXGradePool * pool
Указатель на конкретный грейд хозяина
Definition _FXAlloc.h:61
uint32_t padding
Это ненужные байты, во всяком случае - пока
Definition _FXAlloc.h:64
uint32_t used
Использовано байт
Definition _FXAlloc.h:63
FXMemoryBlock * list
Следующий в списке алоцированных
Definition _FXAlloc.h:62
FXMemoryBlock * next
Следующий в стэке свободных
Definition _FXAlloc.h:60
uint8_t data[]
Пользовательские данные
Definition _FXAlloc.h:65
Пул памяти потока
Definition _FXAlloc.h:93
uint32_t ngrades
Количество градаций
Definition _FXAlloc.h:98
FXGradePool * grades[]
Массив указателей на грейды, заканчивается NULL.
Definition _FXAlloc.h:99
void(** curr_free)(void *Ptr)
Указатель на указатель на функцию освобождения действующую в данном потоке(для профилирования)
Definition _FXAlloc.h:95
eXFAllocSearchType * search_type
Указатель на переменную хранящую информацию о типе функций аллокации для данного потока(нужна при пер...
Definition _FXAlloc.h:96
uint32_t isActive
Показатель активности потока(для профилировщика, он же - сборщик мусора)
Definition _FXAlloc.h:97