Phase V6-HDR-3: SmallSegmentV6 実割り当て & RegionIdBox Registration
実装内容: 1. SmallSegmentV6のmmap割り当ては既に v6-0で実装済み 2. small_heap_ctx_v6() で segment 取得時に region_id_register_v6_segment() 呼び出し 3. region_id_v6.c に TLS スコープのセグメント登録ロジック実装: - 4つの static __thread 変数でセグメント情報をキャッシュ - region_id_register_v6_segment(): セグメント base/end を TLS に記録 - region_id_lookup_v6(): TLS segment の range check を最初に実行 - TLS cache 更新で O(1) lookup 実現 4. region_id_v6_box.h に SmallSegmentV6 type include & function 宣言追加 5. small_v6_region_observe_validate() に region_id_observe_lookup() 呼び出し追加 効果: - HeaderlessデザインでRegionIdBoxが正式にSMALL_V6分類を返せるように - TLS-scopedな簡潔な登録メカニズム (マルチスレッド対応) - Fast path: TLS segment range check -> page_meta lookup - Fall back path: 従来の small_page_meta_v6_of() による動的検出 - Latency: O(1) TLS cache hit rate がv6 alloc/free の大部分をカバー 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -43,8 +43,8 @@
|
||||
#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/smallobject_hotbox_v5_box.h" // SmallObject HotHeap v5 (C6-only route stub, Phase v5-1)
|
||||
// Phase FREE-LEGACY-BREAKDOWN-1: v6 は型エラーがあるため一時的にコメントアウト(デフォルト OFF なので影響なし)
|
||||
// #include "../box/smallobject_core_v6_box.h" // SmallObject Core v6 (C6-only route stub, Phase v6-1)
|
||||
#include "../box/smallobject_core_v6_box.h" // SmallObject Core v6 (Phase V6-HDR-2)
|
||||
#include "../box/smallobject_v6_env_box.h" // SmallObject v6 ENV control (Phase V6-HDR-2)
|
||||
#include "../box/tiny_c7_ultra_box.h" // C7 ULTRA stub (UF-1, delegates to v3)
|
||||
#include "../box/tiny_c6_ultra_free_box.h" // Phase 4-2: C6 ULTRA-free (free-only, C6-only)
|
||||
#include "../box/tiny_c5_ultra_free_box.h" // Phase 5-1/5-2: C5 ULTRA-free + alloc integration
|
||||
@ -224,9 +224,15 @@ static inline void* malloc_tiny_fast(size_t size) {
|
||||
|
||||
switch (route) {
|
||||
case TINY_ROUTE_SMALL_HEAP_V6: {
|
||||
// Phase FREE-LEGACY-BREAKDOWN-1: v6 は既存のビルドエラーがあるため一時的にスキップ
|
||||
// (v6 はデフォルト OFF なので測定には影響なし)
|
||||
// fallthrough to v5/v2/v1
|
||||
// Phase V6-HDR-2: Headerless alloc (ENV gated)
|
||||
if (small_v6_headerless_route_enabled((uint8_t)class_idx)) {
|
||||
SmallHeapCtxV6* ctx_v6 = small_heap_ctx_v6();
|
||||
void* v6p = small_v6_headerless_alloc(ctx_v6, (uint8_t)class_idx);
|
||||
if (TINY_HOT_LIKELY(v6p != NULL)) {
|
||||
return v6p; // No header write needed - done in refill
|
||||
}
|
||||
// v6 returned NULL -> fallback to legacy
|
||||
}
|
||||
__attribute__((fallthrough));
|
||||
}
|
||||
case TINY_ROUTE_SMALL_HEAP_V3: {
|
||||
@ -459,10 +465,15 @@ static inline int free_tiny_fast(void* ptr) {
|
||||
if (__builtin_expect(use_tiny_heap, 0)) {
|
||||
switch (route) {
|
||||
case TINY_ROUTE_SMALL_HEAP_V6: {
|
||||
// Phase FREE-LEGACY-BREAKDOWN-1: v6 は既存のビルドエラーがあるため、今回は skip
|
||||
// (v6 はデフォルト OFF なので測定には影響なし)
|
||||
// fallthrough to v5/v2/v1
|
||||
break;
|
||||
// Phase V6-HDR-2: Headerless free (ENV gated)
|
||||
if (small_v6_headerless_route_enabled((uint8_t)class_idx)) {
|
||||
SmallHeapCtxV6* ctx_v6 = small_heap_ctx_v6();
|
||||
if (small_v6_headerless_free(ctx_v6, ptr, (uint8_t)class_idx)) {
|
||||
return 1; // Handled by v6
|
||||
}
|
||||
// v6 returned false -> fallback to legacy
|
||||
}
|
||||
break; // fallthrough to legacy
|
||||
}
|
||||
case TINY_ROUTE_SMALL_HEAP_V5: {
|
||||
// Phase v5-2: C6-only full implementation
|
||||
|
||||
Reference in New Issue
Block a user