49. 内存泄露¶
app内存泄露 slab内存泄露 kmalloc
申请4k以上的内存 vmalloc
申请内存不释放,不叫泄露。 申请了内存没有referrence才是泄露。
内存泄露无法实时检测
kmemleak
asan
内存corruption是可以实时检测的
SLUB_DEBUG, 扫描内存的redzone或者pedding是不是原来的magic值, 如果不是,会打印调用栈, 能知道有没有corruption,但是不知道谁搞的
ASAN: 需要编译器支持。 把ldr store替换层了san_ldr, san_store。 建立申请内存的shadow, 描述原来的内存能不能访问之类的。 所以ASAN 需要消耗多个内存。程序访问内存的时候, asan检测要访问的内存是不是合法的。 is_valid_addr(p).