abseil strings/ascii 源码分析
Revision:
- lts_2021_03_24
- 278e0a071885a22dcd2fd1b5576cc44757299343
absl/strings/ascii.h
ASCII To Lower & To Upper
对于单个 ascii 字符的 tolower 和 toupper,直接采用了查表法
1 | // ascii_tolower() |
- 查表下标需要 $\ge 0$,所以参数上会要求
unsigned char
将范围控制在 $[0, 255]$ - 某些架构的CPU对于 cmov 等类似指令的 scale 不佳;而某些架构的CPU对于分支预测做的不太好;所以综合下来直接查表不会有性能缺点
- 限定 ASCII 之后 lower/upper case 的转换就不需要考虑 locale 了
有了上面两个基础,针对字符串的 str-to-lower/upper 就非常直接了
1 | void AsciiStrToLower(std::string* s) { |