Skip to content

败犬日报 2024-12-08

1. std::function 递归函数开销太大导致 leetcode 题目超时

std::function 的开销主要是两点:1. 有捕获的话,一般会在堆上申请内存;2. 类型擦除带来的虚函数调用。

关于第一点开销,function 和 any 一样可能有小对象优化(libc++ 是 ≤16B)。除此之外编译器很难对此进行优化。

递归最好只用 lambda 完成,具体做法在 败犬日报 2024-10-08 介绍过。

2. asan 开销

https://github.com/google/sanitizers/wiki/AddressSanitizerPerformanceNumbers

平均下来近一倍的开销。

BENCHMARKO2O2+asanslowdown
400.perlbench344.001304.003.79
401.bzip2490.00844.001.72
403.gcc322.00608.001.89
429.mcf316.00583.001.84
445.gobmk409.00833.002.04
456.hmmer605.001226.002.03
458.sjeng456.00982.002.15
462.libquantum480.00539.001.12
464.h264ref547.001311.002.40
471.omnetpp314.00587.001.87
473.astar403.00655.001.63
483.xalancbmk227.00493.002.17
433.milc408.00666.001.63
444.namd369.00593.001.61
447.dealII321.00597.001.86
450.soplex233.00367.001.58
453.povray189.00425.002.25
470.lbm318.00393.001.24
482.sphinx3519.00911.001.76