💡
原文英文,约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的容器溢出检查。
➡️