- SmallHeapCtx/SmallPageMeta/SmallClassHeap typedef alias 追加 - SmallSegment struct (base/num_pages/owner_tid/magic) を smallsegment_v4_box.h に定義 - SmallColdIface_v4 direct function prototypes (refill/retire/remote_push/drain) - smallobject_hotbox_v4.c の internal/public API 分離(small_segment_v4_internal) - direct function stubs 実装(SmallColdIfaceV4 delegate 形式) - ENV OFF デフォルト(ENABLED=0/CLASSES=0)で既存挙動 100% 不変 - ビルド成功・sanity 確認(mixed/C6-heavy、segv/assert なし) - CURRENT_TASK.md に Phase v4-mid-0 記録 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
59 lines
1.8 KiB
C
59 lines
1.8 KiB
C
// smallobject_hotbox_v4_box.h - SmallObject HotHeap v4 (型スケルトン)
|
||
//
|
||
// 役割:
|
||
// - v4 のページ / クラス / TLS コンテキスト型と API 宣言だけを定義する箱。
|
||
// - 挙動はまだ v3/v1 のまま。alloc/free 本体は後続フェーズで実装する。
|
||
#pragma once
|
||
|
||
#include <stddef.h>
|
||
#include <stdbool.h>
|
||
#include <stdint.h>
|
||
|
||
#include "tiny_geometry_box.h"
|
||
|
||
#ifndef SMALLOBJECT_NUM_CLASSES
|
||
#define SMALLOBJECT_NUM_CLASSES TINY_NUM_CLASSES
|
||
#endif
|
||
|
||
struct small_segment_v4;
|
||
|
||
// Page metadata for v4 HotBox
|
||
typedef struct small_page_v4 {
|
||
void* freelist;
|
||
uint16_t used;
|
||
uint16_t capacity;
|
||
uint8_t class_idx;
|
||
uint8_t flags;
|
||
uint32_t block_size;
|
||
uint8_t* base;
|
||
void* slab_ref; // Superslab / lease token (box境界で扱う)
|
||
struct small_segment_v4* segment; // PF3: segment owner(NULLなら Tiny v1 経路)
|
||
struct small_page_v4* next;
|
||
} small_page_v4;
|
||
|
||
// Per-class heap state (current / partial / full lists)
|
||
typedef struct small_class_heap_v4 {
|
||
small_page_v4* current;
|
||
small_page_v4* partial_head;
|
||
small_page_v4* full_head;
|
||
uint32_t partial_count;
|
||
} small_class_heap_v4;
|
||
|
||
// TLS heap context (per-thread)
|
||
typedef struct small_heap_ctx_v4 {
|
||
small_class_heap_v4 cls[SMALLOBJECT_NUM_CLASSES];
|
||
} small_heap_ctx_v4;
|
||
|
||
// TLS accessor (実装は後続フェーズで追加)
|
||
// SmallPageMeta を external で使う場合のエイリアス
|
||
typedef small_page_v4 SmallPageMeta;
|
||
typedef small_class_heap_v4 SmallClassHeap;
|
||
typedef small_heap_ctx_v4 SmallHeapCtx;
|
||
|
||
small_heap_ctx_v4* small_heap_ctx_v4_get(void);
|
||
|
||
// Hot path API (C7-only stub; later phases will expand)
|
||
void* small_heap_alloc_fast_v4(small_heap_ctx_v4* ctx, int class_idx);
|
||
void small_heap_free_fast_v4(small_heap_ctx_v4* ctx, int class_idx, void* ptr);
|
||
int smallobject_hotbox_v4_can_own(int class_idx, void* ptr);
|