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

问题描述 投票:13回答:5

在几本书中,我发现有关避免使用字符串进行值比较(尤其是在循环中)的注释,因为字符串比较慢得多(使用std :: string)。但是那到底是为什么呢?

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

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

谢谢!

c++ string stl
5个回答
26
投票

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

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

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

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

  • 字符串比较:您必须一个一个地比较每个数字。这是10个比较,因为整数仅相差最后一位。
  • 整数比较:您可以在一个比较中执行此操作,与字符串比较相比,可以保存9个比较。

自然地,这有点简化了,但希望能理解这一点。


12
投票

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

[BTW SSE使字符串一次比较LOT的速度比一次一个字符快,但是它永远无法达到整数比较的速度。


1
投票

显然,字符串比较需要n个整数比较,其中n是字符串的大小,而如果您按比例考虑,则整数比较只是一个比较。比较字符串时,这是一个大概的想法!

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


1
投票

Integers >>通常为4个字节。

Strings

介于1infinity *个字节之间。*嘿,你明白我的意思,不是吗?


0
投票
编译器可以优化整数比较,使其直接在cpu寄存器内进行。
© www.soinside.com 2019 - 2024. All rights reserved.