746ca689a9d83c76ca926fe39cb5f41a59d77640
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(被回收块数) 工作,无同类问题。
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%