Phase v4-3.1: reuse C7 v4 pages and record prep calls

This commit is contained in:
Moe Charm (CI)
2025-12-10 17:58:42 +09:00
parent 31dd1e19d7
commit cbd33511eb
9 changed files with 551 additions and 5 deletions

View File

@ -41,6 +41,7 @@
#include "../box/tiny_heap_box.h" // TinyHeap 汎用 Box
#include "../box/tiny_hotheap_v2_box.h" // TinyHotHeap v2 (Phase31 A/B)
#include "../box/smallobject_hotbox_v3_box.h" // SmallObject HotHeap v3 skeleton
#include "../box/smallobject_hotbox_v4_box.h" // SmallObject HotHeap v4 (C7 stub)
#include "../box/tiny_front_v3_env_box.h" // Tiny front v3 snapshot gate
#include "../box/tiny_heap_env_box.h" // ENV gate for TinyHeap front (A/B)
#include "../box/tiny_route_env_box.h" // Route snapshot (Heap vs Legacy)
@ -132,7 +133,8 @@ static inline void* malloc_tiny_fast(size_t size) {
route_trusted = false;
} else if (!route_trusted &&
route != TINY_ROUTE_LEGACY && route != TINY_ROUTE_HEAP &&
route != TINY_ROUTE_HOTHEAP_V2 && route != TINY_ROUTE_SMALL_HEAP_V3) {
route != TINY_ROUTE_HOTHEAP_V2 && route != TINY_ROUTE_SMALL_HEAP_V3 &&
route != TINY_ROUTE_SMALL_HEAP_V4) {
route = tiny_route_for_class((uint8_t)class_idx);
}
@ -148,6 +150,15 @@ static inline void* malloc_tiny_fast(size_t size) {
// fallthrough to v2/v1
__attribute__((fallthrough));
}
case TINY_ROUTE_SMALL_HEAP_V4: {
void* v4p = small_heap_alloc_fast_v4(small_heap_ctx_v4_get(), class_idx);
if (TINY_HOT_LIKELY(v4p != NULL)) {
return v4p;
}
so_v3_record_alloc_fallback((uint8_t)class_idx);
// fallthrough to v2/v1
__attribute__((fallthrough));
}
case TINY_ROUTE_HOTHEAP_V2: {
void* v2p = tiny_hotheap_v2_alloc((uint8_t)class_idx);
if (TINY_HOT_LIKELY(v2p != NULL)) {
@ -307,6 +318,12 @@ static inline int free_tiny_fast(void* ptr) {
// Same-thread + TinyHeap route → route-based free
if (__builtin_expect(use_tiny_heap, 0)) {
switch (route) {
case TINY_ROUTE_SMALL_HEAP_V4:
if (class_idx == 7) {
small_heap_free_fast_v4(small_heap_ctx_v4_get(), class_idx, base);
return 1;
}
__attribute__((fallthrough));
case TINY_ROUTE_SMALL_HEAP_V3:
so_free((uint32_t)class_idx, base);
return 1;
@ -332,7 +349,7 @@ static inline int free_tiny_fast(void* ptr) {
// fallback: lookup failed but TinyHeap front is ON → use generic TinyHeap free
if (route == TINY_ROUTE_HOTHEAP_V2) {
tiny_hotheap_v2_record_free_fallback((uint8_t)class_idx);
} else if (route == TINY_ROUTE_SMALL_HEAP_V3) {
} else if (route == TINY_ROUTE_SMALL_HEAP_V3 || route == TINY_ROUTE_SMALL_HEAP_V4) {
so_v3_record_free_fallback((uint8_t)class_idx);
}
tiny_heap_free_class_fast(tiny_heap_ctx_for_thread(), class_idx, ptr);