Работа над дневником

This commit is contained in:
2026-05-05 03:13:47 +05:00
parent 51fa314d86
commit de3edc8486
12 changed files with 155 additions and 64 deletions
+20 -1
View File
@@ -1100,6 +1100,25 @@ thread_local void* (*fxalloc)(size_t _NBytes);
thread_local void (*fxfree)(void* _Ptr);
```
Единственным узким местом остаётся переключение режимов, как это сделать расмотрим немного позже.
# 04.05.2026
Единственным узким местом остаётся переключение режимов, как это сделать расмотрим далее
## Переключение режимов работы:
Существенным недостатком использования TLS-указателей на функции является сложность их изменения во время работы из глобальной области. Но, опять таки, мы же пишем на С, будем использовать всю его мощь! Затратив памяти на 2 указателя в каждом отдельном пуле мы сможем обойти сложность TLS и спокойненько менять их по желанию, что имеется в виду:
```C
/* TLS-указатели на функции выделения и высвобождения памяти */
thread_local void* (*fxalloc)(size_t NBytes);
thread_local void (*fxfree)(void* Ptr);
/* Блок выделенный для конкретного потока в глобальном пуле */
typedef struct ThreadMemoryBlock {
void*(**fxalloc)(size_t); ///< Указатель на fxalloc потока
void(**fxfree)(void*); ///< Указатель на fxree потока
/* Остальные поля */
} ThreadMemoryBlock;
/* Управляющий поток-наблютель */
*(globalPoll.threads[tid].fxalloc) = fxalloc_summary;
*(globalPoll.threads[tid].fxfree) = fxfree_summary;
```