为什么整数比较比字符串比较更快?

Mis*_*ion 11 c++ string stl

我在几本书中找到了关于避免使用字符串进行值的比较(特别是在循环中)的注释,因为字符串比较要慢得多(使用std :: string).但究竟是为什么呢?

是因为cpu中的整数单位工作得更快吗?

字符串应该在字节中我猜,所以字节比较不会同样地完成这项工作吗?

谢谢!

Seb*_*olm 24

对于整数,在机器级别存在可以在一个循环中执行比较的指令.

但是,字符串由许多字符组成.为了比较字符串,在最坏的情况下,您必须查看字符串的每个字符.

实际上,当您比较字符串时,您最有可能对字符串中的每个字符使用整数比较.与比较两个整数相比,您可能会看到这很快就会变成很多比较.

示例:如果要将1073741822与1073741823进行比较.

  • 字符串比较:您必须逐个比较每个数字.这是10次比较,因为整数仅相差最后一位数.
  • 整数比较:您可以在一次比较中执行此操作,与String比较相比,可以节省9次比较.

这有点简化,当然,但希望得到重点.

  • @Voigt:忘记了 `\0` 比较,但是,是的,我想我会这样离开它。不想太具体而失去大局。:) (2认同)

Ben*_*igt 12

问题是字符串比较不仅仅是单个比较,它是循环中它们的整个序列.如果比较两个长度为10001个字符且前9000个字符串相同的字符串,您会发生什么?

BTW SSE使得字符串比较比一次一个字符更快,但它永远不会达到整数比较的速度.