我正在以四种不同的方式编译Redis 3.0.6:
-fsanitize=address -fno-omit-frame-pointer
)然后我在所有这些二进制文件下运行标准redis-bench
。我不明白的是,方案3
的性能非常接近方案1
。
有人可以向我解释这是怎么回事?我没有在asan手册中找到任何关于它不支持jemalloc或相关内容的东西。
答案 0 :(得分:1)
你没有提供完全的复制案例,但我的猜测是你
在这种情况下,jemalloc的分配器将覆盖ASan的拦截器,并且不会检查堆分配(这可以解释您的运行没有减速)。相反,您应该将您的可执行文件与jemalloc静态链接:
LDFLAGS += -ljemalloc
我认为理想情况下,当ASan无法拦截堆分配器时,它应该报告一个有用的警告,因此您可能希望在其github上提交错误。