在几本书中,我发现有关避免使用字符串进行值比较(尤其是在循环中)的注释,因为字符串比较慢得多(使用std :: string)。但是那到底是为什么呢?
是因为cpu中的整数单位工作得更快吗?
我猜字符串应该以字节为单位,所以字节比较不会同样地完成这项工作吗?
谢谢!
使用整数,机器级别上存在可以在一个周期内执行比较的指令。
但是,字符串由很多字符组成。为了比较字符串,在最坏的情况下,您必须查看字符串的每个字符。
实际上,当您比较字符串时,最有可能对字符串中的每个字符使用整数比较。您可能会发现,与比较两个整数相比,这很快就能变成很多比较。
示例:如果要比较1073741822与1073741823。
自然地,这有点简化了,但希望能理解这一点。
问题是字符串比较不仅是单个比较,而是循环中的整个序列。如果比较两个长度分别为10001个字符且前9000个字符相同的字符串,会发生什么?
[BTW SSE使字符串一次比较LOT的速度比一次一个字符快,但是它永远无法达到整数比较的速度。
显然,字符串比较需要n个整数比较,其中n是字符串的大小,而如果您按比例考虑,则整数比较只是一个比较。比较字符串时,这是一个大概的想法!
显然,字符串比较将是一个较慢的过程,因为它是整数比较的n个数[[(大约)。
Integers >>通常为4个字节。 Strings