Hasty Briefsbeta

双语

When Compilers Disagree About UTF‑8

20 hours ago
  • 一个用于处理UTF-8的开源C++库最初创建时没有进行大量优化。
  • 优化集中在ASCII快捷方式:ASCII字符(范围U+0000–U+007F)始终通过UTF-8有效性检查,允许提前返回。
  • 一个简单的ASCII快速路径使Clang在纯ASCII文本上的性能提升了三倍,在混合文本上提升了34%。
  • 对于相同的优化,GCC在纯ASCII文本上没有变化,而在混合文本上性能下降了3-4%。
  • 分析表明,Clang没有消除解码后的检查,而GCC已经优化掉了这些检查。
  • 一种改进的方法(在解码函数中内联验证)提高了两个编译器的性能:保留了Clang的增益,并在GCC混合文本上增加了15-20%的提升。
  • 教训:编译器行为各异;仔细优化可以带来显著收益。