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

时间:2011-02-05 00:12:51

标签: c++ string stl

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

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

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

谢谢!

5 个答案:

答案 0 :(得分:23)

对于整数,机器级别上存在可以在一个周期内执行比较的指令。

然而,字符串由许多字符组成。为了比较字符串,在最坏的情况下,你必须查看字符串的每个字符。

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

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

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

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:1)

含糊地说,字符串比较需要n个整数比较,其中n是字符串的大小,而整数比较只是一个比较,如果你认为比例方面。这是比较字符串时可能会发生什么的粗略概念!

因此,字符串比较显然是一个较慢的过程,因为它是n个整数比较(约)

答案 3 :(得分:1)

整数通常 4 - 字节。

字符串位于 1 无穷大* 字节之间。

*嘿,你理解我的意思,不是吗?

答案 4 :(得分:0)

编译器可以优化整数比较,直接在cpu寄存器中发生。