我在几本书中找到了关于避免使用字符串进行值的比较(特别是在循环中)的注释,因为字符串比较要慢得多(使用std :: string)。但究竟为什么呢?
是因为cpu中的整数单位工作得更快吗?
字符串应该在字节中我猜,所以字节比较不会同等地完成这项工作吗?
谢谢!
答案 0 :(得分:23)
对于整数,机器级别上存在可以在一个周期内执行比较的指令。
然而,字符串由许多字符组成。为了比较字符串,在最坏的情况下,你必须查看字符串的每个字符。
实际上,当您比较字符串时,您最有可能对字符串中的每个字符使用整数比较。与比较两个整数相比,你可能会看到这很快就会变成很多比较。
示例:如果要将1073741822与1073741823进行比较。
这有点简化,当然,但希望得到重点。
答案 1 :(得分:12)
问题在于字符串比较不仅仅是单个比较,它是循环中它们的整个序列。如果比较两个长度为10001个字符且前九个字符串相同的字符串,您会发生什么?
BTW SSE使字符串比较一次比一个字符快,但它永远不会达到整数比较的速度。
答案 2 :(得分:1)
含糊地说,字符串比较需要n个整数比较,其中n是字符串的大小,而整数比较只是一个比较,如果你认为比例方面。这是比较字符串时可能会发生什么的粗略概念!
因此,字符串比较显然是一个较慢的过程,因为它是n个整数比较(约)。
答案 3 :(得分:1)
整数通常 4 - 字节。
字符串位于 1 和无穷大* 字节之间。
*嘿,你理解我的意思,不是吗?
答案 4 :(得分:0)
编译器可以优化整数比较,直接在cpu寄存器中发生。