低水平的整数和字符串是如何比较的?就像我们每次使用
int a = 11;
int b = 12;
compare(a,b); //Just an example comparison, not in any particular language.和
String a = "11";
String b = "12";
compare(a,b);现在我要问的是,这两种比较之间的系统级别差异是什么?问题不是针对任何特定的语言,它只是一个一般性的问题。它也不考虑字符串到整数的转换/比较,反之亦然。我知道,对于不同的平台和不同的语言,答案可能是不同的,但由于我对此一无所知,我只是在问一个一般性的问题。
为什么整数比较总是被认为是更快的而不是字符串比较?
发布于 2011-07-19 02:05:27
通常,字符串或整数(以最简单的形式)按字节进行比较。
因此,对于int示例,它变成了单个CPU指令:
cmp a, b它运行得相当快(假设32位ints,32位或更好的处理器)。这是一个适合CPU寄存器的单一比较。
然而,字符串更复杂。最简单的情况是:
foreach ( character c in string a, character d in string b )
cmp c, d并且必须遍历整个字符串,一个字符一个字符。如果字符串的长度不同,则必须处理它(显然,ints都是相同大小的)。
在一个更复杂的层次上,对于地区和不同的字符集,每个字符串字符可能是2-4字节,一些字符(带有重音等)可能比较相等,尽管有不同的字节值。涉及的处理和处理要多得多,而更多的工作几乎总是意味着速度较慢。
确切的行为因地区、字符集和语言而异。有些语言(例如,C#)用长度存储字符串,而另一些语言(C)只存储一个字符数组。其他语言可能是为字符串处理而设计的,或者有经过优化的库来处理它,这样可以降低成本。
有趣的是,在理论上,当使用ASCII字符串时,比较3个字符或更少的字符串可能与比较ints一样快。在这种情况下,它更多地与所涉及的内存量有关(strcmp for ASCII可以在内部使用memcmp,这几乎是==将使用的)。对于在开头存储字符串长度和0长度(空)字符串的语言来说,这也是正确的,因为它们可以简单地比较长度(可能是int)。
发布于 2011-07-19 02:05:20
整数存储为整数值,以二进制形式表示为1和0的单个集合,占用几个字节(取决于操作系统)。
字符串以每数字一个字符的形式存储,每个字符都使用字节中的位模式。
因此,在您的示例中,字符串占用的字节数量大约是ints的两倍。
https://stackoverflow.com/questions/6741499
复制相似问题