GUI: add active timeouts and busy memory blocks counters
- Add timeout_heap_get_size() to get active timer count - Add global counters in memory_pool: g_total_free and g_total_allocated - Simplify busy memory calculation to single formula: busy = memory_pool_get_total_allocated() - memory_pool_get_total_free_blocks() - Add new IDC_EDIT_ACTIVE_TIMEOUTS and IDC_EDIT_BUSY_MEMORY to GUI
This commit is contained in:
1 parent
e596564abd
commit
cee9a04348
8 files changed
+70
-4
No files matched your search
@@ -5,6 +5,17 @@
|
||||
#include "memory_pool.h"
|
||||
#include "mem.h"
|
||||
|
||||
static size_t g_total_free = 0;
|
||||
static size_t g_total_allocated = 0;
|
||||
|
||||
size_t memory_pool_get_total_free_blocks(void) {
|
||||
return g_total_free;
|
||||
}
|
||||
|
||||
size_t memory_pool_get_total_allocated(void) {
|
||||
return g_total_allocated;
|
||||
}
|
||||
|
||||
// Инициализировать пул памяти
|
||||
struct memory_pool* memory_pool_init(size_t object_size) {
|
||||
struct memory_pool* pool = u_calloc(1, sizeof(struct memory_pool));
|
||||
@@ -29,6 +40,7 @@ void* memory_pool_alloc_impl(struct memory_pool* pool, const char* location) {
|
||||
void* obj = pool->free_head;
|
||||
pool->free_head = *(void**)obj; // Извлекаем next из начала блока
|
||||
pool->free_count--;
|
||||
g_total_free--;
|
||||
pool->reuse_count++;
|
||||
memset(obj, 0, pool->object_size); // Опционально: очищаем память для безопасности
|
||||
DEBUG_INFO(DEBUG_CATEGORY_MEMORY, "pool_alloc reused: %s, remaining=%zu", location, pool->free_count);
|
||||
@@ -36,6 +48,7 @@ void* memory_pool_alloc_impl(struct memory_pool* pool, const char* location) {
|
||||
}
|
||||
|
||||
pool->allocations++;
|
||||
g_total_allocated++;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_MEMORY, "pool_alloc: %s, total_allocs=%zu", location, pool->allocations);
|
||||
return u_calloc_impl(1, pool->object_size, location); // Используем calloc для инициализации нулями
|
||||
}
|
||||
@@ -51,6 +64,7 @@ void memory_pool_free_impl(struct memory_pool* pool, void* obj, const char* loca
|
||||
*(void**)obj = pool->free_head; // Сохраняем next в начало блока
|
||||
pool->free_head = obj;
|
||||
pool->free_count++;
|
||||
g_total_free++;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_MEMORY, "pool_free returned: %s, free_count=%zu", location, pool->free_count);
|
||||
return;
|
||||
}
|
||||
@@ -84,6 +98,8 @@ void memory_pool_destroy(struct memory_pool* pool) {
|
||||
void* obj = pool->free_head;
|
||||
while (obj) {
|
||||
void* next = *(void**)obj;
|
||||
g_total_free--;
|
||||
g_total_allocated--;
|
||||
u_free(obj);
|
||||
cnt++;
|
||||
obj = next;
|
||||
|
||||
Reference in new issue
Block a user