原文英文,约700词,阅读约需3分钟。
📝
内容提要
微软C++标准库的调试模式可以帮助程序员避免访问违规错误,每个容器都有一个自定义的“包装”迭代器,每次访问时都会检查它仍然有效,不是结束迭代器,并在执行算术时检查它仍然在范围内。编译器可以插入检查,以确保访问的内存在范围内并且尚未释放,微软标准库团队为std :: vector添加了ASan容器溢出注释支持。
🎯
关键要点
-
微软C++标准库的调试模式帮助程序员避免访问违规错误。
-
每个容器都有自定义的“包装”迭代器,检查有效性和范围。
-
使用指针时,迭代器的检查无法生效。
-
引入地址清理器(ASan)来检查内存访问是否在范围内。
-
ASan可以检查栈和堆内存的越界访问。
-
标准库团队为std::vector添加了ASan容器溢出注释支持。
-
std::string由于小字符串优化(SSO)与std::vector不同,初始实现存在问题。
-
Visual Studio 2022 17.6 Preview 1修复了std::string的ASan跟踪机制。
-
std::string的SSO缓冲区未被注释,仍可能出现越界访问。
-
可以通过编译选项禁用std::string的容器溢出检查。
🏷️