From 2a0b91e7b480da268ff5b518cfb7cabc9652030f Mon Sep 17 00:00:00 2001 From: dzaima Date: Sun, 11 Jul 2021 23:07:07 +0300 Subject: [PATCH] counters instead of allocB --- src/core/mm.c | 2 -- src/core/stuff.h | 3 --- src/jit/nvm_x86_64.c | 5 +---- src/opt/mm_2buddy.c | 7 ++++++- src/opt/mm_2buddy.h | 2 ++ src/opt/mm_buddy.c | 9 ++++++--- src/opt/mm_buddy.h | 1 + src/opt/mm_buddyTemplate.h | 4 ++-- 8 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/core/mm.c b/src/core/mm.c index d944b21d..d4db6bf6 100644 --- a/src/core/mm.c +++ b/src/core/mm.c @@ -1,7 +1,5 @@ #include "../core.h" -u64 allocB; // currently allocated number of bytes - #if MM==0 #include "../opt/mm_malloc.c" #elif MM==1 diff --git a/src/core/stuff.h b/src/core/stuff.h index 48b58fdf..cee3844c 100644 --- a/src/core/stuff.h +++ b/src/core/stuff.h @@ -1,6 +1,3 @@ -extern u64 allocB; // currently allocated number of bytes - - // memory defs static void* mm_alloc(usz sz, u8 type); diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index 03448d62..1e110e8a 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -16,8 +16,7 @@ // separate memory management system for executable code; isn't garbage-collected EmptyValue* mmX_buckets[64]; -u64 mmX_allocB; -#define allocB mmX_allocB +u64* mmX_ctrs[64]; #define BSZ(X) (1ull<<(X)) #define BSZI(X) ((u8)(64-__builtin_clzl((X)-1ull))) #define MMI(X) X @@ -29,8 +28,6 @@ u64 mmX_allocB; #define FLAGS MAP_NORESERVE|MAP_PRIVATE|MAP_ANON|MAP_32BIT #include "../opt/mm_buddyTemplate.c" static void* mmX_allocN(usz sz, u8 type) { assert(sz>=16); return mmX_allocL(64-__builtin_clzl(sz-1ull), type); } -#undef allocB -#undef mmX_buckets #undef BN #undef BSZ diff --git a/src/opt/mm_2buddy.c b/src/opt/mm_2buddy.c index 5b359696..a7a102a0 100644 --- a/src/opt/mm_2buddy.c +++ b/src/opt/mm_2buddy.c @@ -4,6 +4,7 @@ u64 currObjCounter; #endif +u64 b1_ctrs[64]; EmptyValue* b1_buckets[64]; #define ALSZ 20 #define BSZ(X) (1ull<<(X)) @@ -13,6 +14,7 @@ EmptyValue* b1_buckets[64]; #undef BN #undef BSZ +u64 b3_ctrs[64]; EmptyValue* b3_buckets[64]; #define ALSZ 20 #define BSZ(X) (3ull<<(X)) @@ -28,5 +30,8 @@ void mm_forHeap(V2v f) { } u64 mm_heapUsed() { - return allocB; + u64 r = 0; + for (i32 i = 0; i < 64; i++) r+= b1_ctrs[i] * (1ull<type!=t_freed) x->flags = x->type; #else u8 b = x->mmInfo&63; + BN(ctrs)[x->mmInfo&63]--; ((EmptyValue*)x)->next = buckets[b]; buckets[b] = (EmptyValue*)x; - allocB-= BSZ(b); #endif x->type = t_empty; } @@ -26,7 +26,7 @@ static void* BN(allocL)(i64 bucket, u8 type) { VALGRIND_MAKE_MEM_UNDEFINED(x, BSZ(bucket)); VALGRIND_MAKE_MEM_DEFINED(&x->mmInfo, 1); #endif - allocB+= BSZ(bucket); + BN(ctrs)[bucket]++; u8 mmInfo = x->mmInfo; x->flags = x->extra = x->type = x->mmInfo = 0; x->refc = 1;