Archived
1
0
Fork 0

first and last commit

This commit is contained in:
Sen 2025-09-02 14:43:36 +02:00
commit c9e78fd810
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
381 changed files with 37141 additions and 0 deletions

94
mem.h Normal file
View file

@ -0,0 +1,94 @@
void *mem_alloc(ulong size, byte cat) {
byte *ptr = malloc(size + sizeof(ulong));
if(ptr) {
sys.mem_alloc += size;
sys.mem_blocks += 1;
sys.mem_peak = sys.mem_alloc > sys.mem_peak ? sys.mem_alloc : sys.mem_peak;
sys.mem_pool_sizes[cat] += size;
sys.mem_pool_blocks[cat] += 1;
*((ulong*)ptr) = ((ulong)size) | (((ulong)cat) << 56);
ptr += sizeof(ulong);
#ifdef MEM_TRACING
logt(LOG_MEM, STR_MEM_ALLOC, size, (ulong)ptr, sys.mem_alloc, mem_types[cat]);
#endif
}
else {
sys_panic("OUT_OF_MEMORY", "Konnte nicht %lld Bytes Speicher für %s reservieren", size, mem_types[cat]);
}
return (void *)ptr;
}
void *mem_zeros(ulong size, byte cat) {
byte *ptr = calloc(size + sizeof(ulong), 1);
if(ptr) {
sys.mem_alloc += size;
sys.mem_blocks += 1;
sys.mem_peak = sys.mem_alloc > sys.mem_peak ? sys.mem_alloc : sys.mem_peak;
sys.mem_pool_sizes[cat] += size;
sys.mem_pool_blocks[cat] += 1;
*((ulong*)ptr) = ((ulong)size) | (((ulong)cat) << 56);
ptr += sizeof(ulong);
#ifdef MEM_TRACING
logt(LOG_MEM, STR_MEM_ALLOC, size, (ulong)ptr, sys.mem_alloc, mem_types[cat]);
#endif
}
else {
sys_panic("OUT_OF_MEMORY", "Konnte nicht %lld Bytes Speicher für %s reservieren", size, mem_types[cat]);
}
return (void *)ptr;
}
void mem_free(void *vptr) {
byte *ptr = (byte *)vptr;
ulong size;
byte cat;
if(ptr == NULL) {
return;
}
ptr -= sizeof(ulong);
size = (ulong)(((ulong)*((ulong*)ptr)) & 0x00ffffffffffffffULL);
cat = (byte)(((ulong)*((ulong*)ptr)) >> 56);
free(ptr);
sys.mem_alloc -= size;
sys.mem_blocks -= 1;
sys.mem_pool_sizes[cat] -= size;
sys.mem_pool_blocks[cat] -= 1;
#ifdef MEM_TRACING
logt(LOG_MEM, STR_MEM_FREE, size, (ulong)ptr, sys.mem_alloc, mem_types[cat]);
#endif
}
void *mem_realloc(void *vptr, ulong size, byte cat) {
byte *ptr = (byte *)vptr;
ulong psize;
byte ocat;
byte *nptr;
if(ptr == NULL) {
return mem_alloc(size, cat);
}
else if(size == 0) {
mem_free(ptr);
return NULL;
}
ptr -= sizeof(ulong);
psize = (ulong)(((ulong)*((ulong*)ptr)) & 0x00ffffffffffffffULL);
ocat = (byte)(((ulong)*((ulong*)ptr)) >> 56);
nptr = realloc(ptr, size + sizeof(ulong));
if(nptr) {
sys.mem_alloc -= psize;
sys.mem_alloc += size;
sys.mem_peak = sys.mem_alloc > sys.mem_peak ? sys.mem_alloc : sys.mem_peak;
sys.mem_pool_sizes[ocat] -= psize;
sys.mem_pool_sizes[cat] += size;
*((ulong*)nptr) = ((ulong)size) | (((ulong)cat) << 56);
nptr += sizeof(ulong);
#ifdef MEM_TRACING
logt(LOG_MEM, STR_MEM_REALLOC, psize, size, (ulong)nptr, sys.mem_alloc, mem_types[cat]);
#endif
}
else {
sys_panic("OUT_OF_MEMORY", "Konnte nicht %lld auf %lld Bytes Speicher bei $%llx für %s neu reservieren", psize, size, (ulong)ptr, mem_types[cat]);
}
return (void *)nptr;
}