Работа над дневником
This commit is contained in:
+20
-1
@@ -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;
|
||||
```
|
||||
Reference in New Issue
Block a user