Files
kolibrios/programs/develop/ktcc/trunk/libc.obj/source/stdlib/_mem.h
Egor00f bb59eac8d6
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 1m7s
Build system / Build (pull_request) Successful in 15m52s
libc.obj: update malloc/free/realloc
гавно говна, нужно доработать
2026-01-14 00:03:55 +05:00

54 lines
1.5 KiB
C

#ifndef _LIBC_STDLIB__MEM_
#define _LIBC_STDLIB__MEM_
#include <stddef.h>
struct mem_node {
// сколько свободно
size_t free;
// Размер блока
size_t size;
struct mem_node* last;
struct mem_node* next;
// реально выделена под него память
// если нет, то он получается был втиснут в другой блок
// bool is_real;
};
// блок выделенной памяти
struct mem_block {
size_t size; // сколько было полученно памяти
};
// получить указатель на данные ноды
#define GET_MEM_NODE_PTR(node) (char*)((char*)(node) + sizeof(struct mem_node))
// Является ли блок сейчас пустым
#define MEM_NODE_IS_FREE(node) (node->free == node->size)
#define GET_mem_node_USED_MEM(node) (node->size - node->free)
#define GET_mem_node_HEADER(ptr) ((struct mem_node*)((char*)ptr - sizeof(struct mem_node)))
// проверить находятся ли ноды в одном блоке.
// Если они в одном блоке, но получаестя они должны идти друг за другом
#define mem_nodeS_ARE_IN_ONE_BLOCK(left, right) (GET_MEM_NODE_PTR(left) + left->size == (char*)right)
// Размер блока
#define ALLOC_BLOCK_SIZE 4096
inline size_t __mem_align(size_t value, size_t v)
{
size_t ret = (value + v - 1) & ~(v - 1);
return ret;
}
static struct mem_node* __mem_node = NULL;
#endif // _LIBC_STDLIB_MEM_