Phase ALLOC-GATE-SSOT-1 + ALLOC-TINY-FAST-DUALHOT-2: Structure fixes for alloc path
4 patches to eliminate allocation overhead and enable research path: Patch 1: Extract malloc_tiny_fast_for_class(size, class_idx) - SSOT: size→class conversion happens once in gate - malloc_tiny_fast() becomes thin wrapper - Foundation for eliminating duplicate lookups Patch 2: Update tiny_alloc_gate_fast() to call *_for_class - Pass class_idx computed in gate to malloc_tiny_fast_for_class() - Eliminates second hak_tiny_size_to_class() call - Impact: +1-2% expected from reduced instruction count Patch 3: Reposition DUALHOT branch (C0-C3 only) - Move class_idx <= 3 check outside alloc_dualhot_enabled() - C4-C7 no longer evaluate ENV gate (even when OFF) - Impact: Maintains neutral performance on default path Patch 4: Probe window for ENV gate - Tolerate early putenv() before probe window exhausted (64 calls) - Maintains correctness for bench_profile setenv timing A/B Results (DUALHOT=0 vs DUALHOT=1): - Mixed median: 48.75M → 48.62M ops/s (-0.27%, neutral within variance) - C6-heavy median: 23.24M → 23.63M ops/s (+1.68%, SSOT benefit) Decision: ADOPT with DUALHOT default OFF (research feature) - SSOT provides structural improvement - No regression on default configuration - C6-heavy shows SSOT effectiveness (+1.68%) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -151,8 +151,8 @@ static inline void* tiny_alloc_gate_fast(size_t size)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// まず Tiny Fast Path で割り当て(USER ポインタを得る)
|
||||
void* user_ptr = malloc_tiny_fast(size);
|
||||
// Phase ALLOC-GATE-SSOT-1: Pass class_idx to *_for_class (eliminate duplicate size→class lookup)
|
||||
void* user_ptr = malloc_tiny_fast_for_class(size, class_idx);
|
||||
|
||||
// Tiny-only: その結果をそのまま返す(NULL なら上位が扱う)
|
||||
if (__builtin_expect(route == ROUTE_TINY_ONLY, 1)) {
|
||||
|
||||
Reference in New Issue
Block a user