Phase v5-0 refactor: ENV統一・マクロ化・構造体最適化
- ENV initialization を sentinel パターンで統一
- ENV_UNINIT/ENABLED/DISABLED 定数追加
- __builtin_expect で初期化チェックを最適化
- small_heap_v5_enabled/class_mask を統一パターンに変更
- ポインタマクロ化(O(1) segment/page 計算)
- SMALL_SEGMENT_V5_BASE_FROM_PTR: ptr から segment base を mask で計算
- SMALL_SEGMENT_V5_PAGE_IDX: segment 内の page_idx を shift で計算
- SMALL_SEGMENT_V5_PAGE_META: page_meta への O(1) access(bounds check付き)
- SMALL_SEGMENT_V5_VALIDATE_MAGIC: magic 検証
- SMALL_SEGMENT_V5_VALIDATE_PTR: Fail-Fast validation pipeline
- SmallClassHeapV5 に partial_count 追加
- partial ページリストのカウンタを追加(refill/retire 最適化用)
- SmallPageMetaV5 の field 再配置(L1 cache 最適化)
- hot fields (free_list, used, capacity) を先頭に集約
- metadata (class_idx, flags, page_idx, segment) を後方配置
- total 24B、offset コメント追加
- route priority ENV 追加
- HAKMEM_ROUTE_PRIORITY={v4|v5|auto}(default: v4)
- enum small_route_priority 定義
- small_route_priority() 関数追加
- segment_size override ENV 追加
- HAKMEM_SMALL_HEAP_V5_SEGMENT_SIZE(default: 2MiB)
- power of 2 & >= 64KiB validation
挙動: 完全不変(v5 route は呼ばれない、ENV default OFF)
テスト: Mixed 16–1024B で 43.0–43.8M ops/s(変化なし)、SEGV/assert なし
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -10,21 +10,26 @@
|
||||
#define NUM_SMALL_CLASSES_V5 8 // C0–C7
|
||||
|
||||
// SmallPageMetaV5: v5 ページメタデータ
|
||||
// Hot fields (alloc/free 頻繁アクセス) を先頭に集約(L1 cache 最適化)
|
||||
typedef struct SmallPageMetaV5 {
|
||||
void* free_list; // フリーリスト先頭
|
||||
uint16_t used; // 使用中ブロック数
|
||||
uint16_t capacity; // このページの総容量
|
||||
uint8_t class_idx; // size class index
|
||||
uint8_t flags; // reserved
|
||||
uint16_t page_idx; // segment 内でのページインデックス
|
||||
void* segment; // SmallSegmentV5* への backpointer
|
||||
} SmallPageMetaV5;
|
||||
// Hot fields (alloc/free 頻繁アクセス)
|
||||
void* free_list; // フリーリスト先頭 (offset 0)
|
||||
uint16_t used; // 使用中ブロック数 (offset 8)
|
||||
uint16_t capacity; // このページの総容量 (offset 10)
|
||||
|
||||
// Metadata(初期化時のみ)
|
||||
uint8_t class_idx; // size class index (offset 12)
|
||||
uint8_t flags; // reserved (offset 13)
|
||||
uint16_t page_idx; // segment 内でのページインデックス (offset 14)
|
||||
void* segment; // SmallSegmentV5* への backpointer (offset 16)
|
||||
} SmallPageMetaV5; // total 24B
|
||||
|
||||
// SmallClassHeapV5: サイズクラス毎のホットヒープ状態
|
||||
typedef struct SmallClassHeapV5 {
|
||||
SmallPageMetaV5* current; // 現在のページ(alloc 中)
|
||||
SmallPageMetaV5* partial_head; // partial ページリスト
|
||||
SmallPageMetaV5* full_head; // full ページリスト
|
||||
uint32_t partial_count; // partial ページ数
|
||||
} SmallClassHeapV5;
|
||||
|
||||
// SmallHeapCtxV5: per-thread ホットヒープコンテキスト
|
||||
|
||||
Reference in New Issue
Block a user