答案 0 :(得分:3)
默认情况下,不使用malloc_check_或mcheck(),glibc会做一些不会影响性能的小检查,比如在同一个内存块上调用两次free()。这就是为什么你得到这些消息的原因,但是你不会通过使用MALLOC_CHECK_获得malloc替代api提供的所有消息(它们正在进行更多的测试,但是更多的cpu密集)。您可以通过触发错误并使用malloc_check_和不使用malloc_check_对其进行测试来检查这一点。例如,对于一个简单的double-free(),无论何时设置MALLOC_CHECK_,我都会得到“double free或corruption(top)”或“free():invalid invalid”错误。
要回答1 /问题,mcheck依赖于malloc挂钩,因为它们存在(如15年),并且这些挂钩不是为了线程安全。
来源:glibc / malloc / malloc.c,http://sourceware.org/bugzilla/show_bug.cgi?id=9939