Phase v4-3.1: reuse C7 v4 pages and record prep calls
This commit is contained in:
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user