TermiNexus 746ca689a9 perf(memhub): alloc 周期全表扫描开关默认关闭,消除 O(det_count) 热点
MemBuddy.alloc 每 32 次分配进入的采样块内含记录表重叠全表扫描(while _det_count)与 [MEMDBG] 空闲链残留扫描,二者耗时全部落在 alloc 的 self 内。实测 alloc self=681.85e9 tick、25,419,348 次,约 26,824 tick/次,其中该采样块约 8.6e5 tick/次采样(占比超过 99%):按 32 采样只把次数降到 1/32,不改变 O(n^2) 量级。

新增编译期开关 MEMBUDDY_PERIOD_SCAN(默认 0,范式同 MEMBUDDY_THREAD_SAFE/MEMBUDDY_FILL_GUARD);置 1 时与历史实现逐字节一致。块内除诊断路径的 printf/fflush/exit 外无任何状态写入,记录追加在块外,故关闭不改变分配器语义,仅少两项诊断(等价能力仍由 free 内的 [MEMDBG] 重复归还检测与 self_check/check_alive_blocks/is_alive 提供)。

已确认 MEMBUDDY_FILL_GUARD=0 生效(非本次主因)、detection=0、无每次分配的 I/O;_split_to_order/_coalesce/_fl_push/_fl_pop/reset_to 经核对均为合法的 O(1) 或 O(被回收块数) 工作,无同类问题。
2026-09-14 15:11:43 +08:00
2026-08-17 11:01:35 +08:00
2026-08-27 10:16:28 +08:00
2026-08-27 10:16:28 +08:00
2026-08-17 11:01:35 +08:00
2026-08-17 11:01:35 +08:00
2026-09-11 18:57:39 +08:00
2026-08-22 09:25:46 +08:00
2026-08-17 11:01:35 +08:00
2026-08-17 11:01:35 +08:00
2026-08-17 11:01:35 +08:00
2026-09-11 18:57:39 +08:00
2026-08-17 11:01:35 +08:00
2026-08-17 11:01:35 +08:00
2026-08-27 10:16:28 +08:00
2026-08-27 10:16:28 +08:00
2026-08-27 10:16:28 +08:00
2026-08-17 11:01:35 +08:00
2026-08-17 11:01:35 +08:00
S
Description
GVSDS(TM) Viper SE Runtime Environment and Library (VRTE)
15 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 76.8%
C 22%
CMake 1.2%