NeurOX 1.0.0 dev-in-progress
Экосистема многопользовательской игры классические крестики-нолики с ИИ
Загрузка...
Поиск...
Не найдено
FXAlloc.h
См. документацию.
1#pragma once
91#ifdef __cplusplus
92extern "C" {
93#endif //__cplusplus
94 #include <stdint.h>
95
96 #if (defined(__GNUC__) && (__GNUC__ >= 5)) || defined(__clang__)
97 #include <stdatomic.h>
98 #include <pthread.h>
99 #define TLS __thread
100 typedef pthread_mutex_t fxsync_t;
101 typedef pthread_t thread_id_t;
102 #elif defined(_MSC_VER) && _MSC_VER >= 1930
103 #include <stdatomic.h>
104 #include <windows.h>
105 #define TLS __declspec(thread)
106 typedef HANDLE fxsync_t;
107 typedef HANDLE thread_id_t;
108 #else
109 #error "Unsupported compiler. Only Clang, GCC >=5.0 and MSVC VS 2022+ support _Atomic in C11"
110 #endif
111
112 /*=================================================================================================
113 Установки по умолчанию
114 *=================================================================================================*/
150 /*=================================================================================================*/
151
170
181
190 typedef struct FXGrade {
191 const size_t est_size;
192 const size_t est_count;
193 } FXGrade;
194
219
231
232#ifndef _I_UNDERSTAND_THAT_I_SHOULD_NEVER_CHANGE_THESE_POINTERS_
241 extern TLS void (*const fxalloc)(size_t NBytes);
242#else
250 extern TLS void (*fxalloc)(size_t NBytes);
251#endif
252
253#ifndef _I_UNDERSTAND_THAT_I_SHOULD_NEVER_CHANGE_THESE_POINTERS_
260 extern TLS void (*const fxfree)(void* Ptr);
261#else
268 extern TLS void (*fxfree)(void* Ptr);
269#endif
275
293 typedef struct FXAllocGradeStat {
294 /* FXALLOC_SUMMARY + FXALLOC_FULL */
295 uint32_t block_size;
296 uint32_t blocks_total;
299 /* FXALLOC_FULL */
300 uint32_t blocks_used;
301 uint32_t data_min;
302 uint32_t data_max;
303 uint32_t data_avg;
305
319
341 int fxalloc_profile(eFXAllocProfile Profile, void(*Callback)(FXAllocStatistics** MemoryState));
342
366 int fxalloc_profile_thread(int ThreadID, eFXAllocProfile Profile, void(*Callback)(FXAllocStatistics** MemoryState));
367
374
375
376#ifdef __cplusplus
377}
378#endif //__cplusplus
eXFAllocSearchType
Варианты настройки алгоритма поиска подходящего грейда для данного потока В случае если первой в пото...
Definition FXAlloc.h:164
@ FXSEARCH_AUTO
Definition FXAlloc.h:165
@ FXSEARCH_LINEAR
Выберется Бинарный/линейный в зависимости от длины массива градаций(>= 7)
Definition FXAlloc.h:166
@ FXSEARCH_BINARY
Линейный поиск
Definition FXAlloc.h:167
@ FXSEARCH_SHIFTED
Бинарный поиск
Definition FXAlloc.h:168
TLS void(*const fxfree)(void *Ptr)
Указатель на функцию высвобождения памяти выделенной исключительно fxalloc при использовании на любом...
Definition FXAlloc.c:16
eFXAllocDefaultConfig
Это перечисление устанавливает настройки аллокатора по умолчанию
Definition FXAlloc.h:133
@ FXALLOC_GRADE_STEP_SHIFT
Definition FXAlloc.h:138
@ FXALLOC_MAX_GRADE_SIZE
Definition FXAlloc.h:148
@ FXALLOC_LIFO_HEAD_ALIGN
Definition FXAlloc.h:143
int fxalloc_profile(eFXAllocProfile Profile, void(*Callback)(FXAllocStatistics **MemoryState))
Переключает режимы работы алокатора для всего роцесса
eFXAllocProfile
Перечисление режимов работы аллокатора.
Definition FXAlloc.h:175
@ FXALLOC_SUMMARY
Поверхностная статистика
Definition FXAlloc.h:177
@ FXALLOC_FULL
Глубокий анализ расхода памяти
Definition FXAlloc.h:178
@ FXALLOC_SPEED
Максимальная производительность без статистики
Definition FXAlloc.h:176
@ FXALLOC_GETPROFILE
Используется для получения текущего профиля
Definition FXAlloc.h:179
int fxalloc_profile_thread(int ThreadID, eFXAllocProfile Profile, void(*Callback)(FXAllocStatistics **MemoryState))
Переключает режим работы алокатора для потока указанного в ThreadID.
void fxalloc_cleanup()
Высвобождает ресурсы занятые потоком. Вызывать непосредственно перед выходом из потока/процесса,...
int fxalloc_init(FXAllocSetupThread *Options)
Инициализирует локальный пул памяти исходя из заданных параметров блоков
void fxalloc_finalize()
Функция очистки всей занятой памяти.
TLS void(*const fxalloc)(size_t NBytes)
Указатель на функцию выделения памяти
Definition FXAlloc.c:15
Структурная единица отчёта по каждому грейду
Definition FXAlloc.h:293
uint32_t blocks_used
Блоков выделенных дополнительно
Definition FXAlloc.h:300
uint32_t blocks_prealloced
Всего блоков
Definition FXAlloc.h:297
uint32_t data_min
Блоков используется
Definition FXAlloc.h:301
uint32_t blocks_total
Размер блока(грейд)
Definition FXAlloc.h:296
uint32_t blocks_malloced
Преаллоцировано блоков
Definition FXAlloc.h:298
uint32_t data_avg
Максимальный размер данных
Definition FXAlloc.h:303
uint32_t data_max
Минимальный размер данных
Definition FXAlloc.h:302
uint32_t block_size
Definition FXAlloc.h:295
Структура настройки потока
Definition FXAlloc.h:213
const char * name
Definition FXAlloc.h:214
eFXAllocProfile profile
Указатель на массив с настройками градаций
Definition FXAlloc.h:216
eXFAllocSearchType search_type
Профиль
Definition FXAlloc.h:217
const FXGrade * grades
Название потока
Definition FXAlloc.h:215
Структурная елиница отчёта по потокам
Definition FXAlloc.h:313
size_t thread_id
Данные профилирования по каждому грейду
Definition FXAlloc.h:316
const char * thread_name
Definition FXAlloc.h:314
size_t ngrades
Внутренний идентификатор потока
Definition FXAlloc.h:317
FXAllocGradeStat * profile
Название потока
Definition FXAlloc.h:315
Структура преднастройки аллокатора задающая градации и количество блоков памяти. Массив должен быть о...
Definition FXAlloc.h:190
const size_t est_size
Предполагаемый размер блока
Definition FXAlloc.h:191
const size_t est_count
Предполагаемое количество блоков
Definition FXAlloc.h:192