菜鸟笔记
提升您的技术认知

asan 极简原理-ag真人游戏

  1. 物理内存有限,虚拟内存无限。
  2. asan 接管了应用程序的 malloc 流程
  3. 每次分配内存,一定使用全新的虚拟地址,并且在地址两端加页保护

over

要点:因为虚拟内存资源是“无限”的,所以可以大量浪费。浪费体现在两个方面:

  • 分配过的地址空间,即使 free 过了,也不会再次分配给用户。用户感受到的就是内存分配器每次分配出来的内存地址总是比上一次的高。
    • 已经 free 过的内存区域这里称为 dead zone
  • 每次分配一段内存时,总会在两端预留一个页面,并且将这两个页面做读写保护。
    • 两端预留的页面称为 red zone

在这个机制的基础上,asan 只需要跟踪好每次内存分配的堆栈,就能在出问题的时候准确报告出出问题点。能探测到的内存问题:

  • 访问已经 free 过的内存,触发 dead zone 报警
  • 内存访问越界,触发 red zone 报警
  • 部分野指针问题,触发 dead zone / red zone 报警

什么问题 asan 不能解决?

  • 部分野指针问题(正好写到了还没有 “dead” 的内存区域,不会触发任何报警)
网站地图