Refactor: Phase 2 Box化 - SuperSlab Lookup Box with multiple contract levels
Purpose: Formalize SuperSlab lookup responsibilities with clear safety guarantees Evolution: - Phase 12: UNSAFE mask+dereference (5-10 cycles) → 12% crash rate - Phase 1b: SAFE registry lookup (50-100 cycles) → 0% crash rate - Phase 2: Box化 - multiple contracts (UNSAFE/SAFE/GUARDED) Box Pattern Benefits: 1. Clear Contracts: Each API documents preconditions and guarantees 2. Multiple Levels: Choose speed vs safety based on context 3. Future-Proof: Enables optimizations without breaking existing code API Design: - ss_lookup_unsafe(): 5-10 cycles, requires validated pointer (internal use only) - ss_lookup_safe(): 50-100 cycles, works with arbitrary pointers (recommended) - ss_lookup_guarded(): 100-200 cycles, adds integrity checks (debug only) - ss_fast_lookup(): Backward compatible (→ ss_lookup_safe) Implementation: - Created core/box/superslab_lookup_box.h with full contract documentation - Integrated into core/superslab/superslab_inline.h - ss_lookup_safe() implemented as macro to avoid circular dependency - ss_lookup_guarded() only available in debug builds - Removed conflicting extern declarations from 3 locations Testing: - Build: Success (all warnings resolved) - Crash rate: 0% (50/50 iterations passed) - Backward compatibility: Maintained via ss_fast_lookup() macro Future Optimization Opportunities (documented in Box): - Phase 2.1: Hybrid lookup (try UNSAFE first, fallback to SAFE) - Phase 2.2: Per-thread cache (1-2 cycles hit rate) - Phase 2.3: Hardware-assisted validation (PAC/CPUID) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -130,7 +130,7 @@ static inline uint32_t tiny_tls_sll_drain(int class_idx, uint32_t batch_size) {
|
||||
}
|
||||
|
||||
// External functions needed for drain
|
||||
extern SuperSlab* hak_super_lookup(void* ptr); // SuperSlab registry lookup
|
||||
// Note: hak_super_lookup() is defined in hakmem_super_registry.h (included transitively)
|
||||
extern const size_t g_tiny_class_sizes[TINY_NUM_CLASSES]; // Block sizes (const)
|
||||
|
||||
// Get thread ID once (used for all blocks)
|
||||
|
||||
Reference in New Issue
Block a user